国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android IntentService詳解及使用實(shí)例

2019-12-12 03:32:24
字體:
供稿:網(wǎng)友

Android IntentService詳解

一、IntentService簡介

IntentService是Service的子類,比普通的Service增加了額外的功能。先看Service本身存在兩個問題: 

  • Service不會專門啟動一條單獨(dú)的進(jìn)程,Service與它所在應(yīng)用位于同一個進(jìn)程中; 
  • Service也不是專門一條新線程,因此不應(yīng)該在Service中直接處理耗時的任務(wù);  

二、IntentService特征

  • 會創(chuàng)建獨(dú)立的worker線程來處理所有的Intent請求; 
  • 會創(chuàng)建獨(dú)立的worker線程來處理onHandleIntent()方法實(shí)現(xiàn)的代碼,無需處理多線程問題; 
  • 所有請求處理完成后,IntentService會自動停止,無需調(diào)用stopSelf()方法停止Service; 
  • 為Service的onBind()提供默認(rèn)實(shí)現(xiàn),返回null; 
  • 為Service的onStartCommand提供默認(rèn)實(shí)現(xiàn),將請求Intent添加到隊(duì)列中; 

 三、使用步驟(詳情參考Service項(xiàng)目)

繼承IntentService類,并重寫onHandleIntent()方法即可;

MainActivity.Java文件

public class MainActivity extends Activity {      @Override    protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.activity_main);    }      public void startService(View source) {      // 創(chuàng)建所需要啟動的Service的Intent      Intent intent = new Intent(this, MyService.class);      startService(intent);    }      public void startIntentService(View source) {      // 創(chuàng)建需要啟動的IntentService的Intent      Intent intent = new Intent(this, MyIntentService.class);      startService(intent);    }  }  

 MyIntentService.java文件

public class MyIntentService extends IntentService {      public MyIntentService() {      super("MyIntentService");    }      @Override    protected void onHandleIntent(Intent intent) {      // IntentService會使用單獨(dú)的線程來執(zhí)行該方法的代碼      // 該方法內(nèi)執(zhí)行耗時任務(wù),比如下載文件,此處只是讓線程等待20秒      long endTime = System.currentTimeMillis() + 20 * 1000;      System.out.println("onStart");      while (System.currentTimeMillis() < endTime) {        synchronized (this) {          try {            wait(endTime - System.currentTimeMillis());          } catch (InterruptedException e) {            e.printStackTrace();          }        }      }      System.out.println("----耗時任務(wù)執(zhí)行完成---");    }  }   

MyService.java文件

public class MyService extends Service {      @Override    public IBinder onBind(Intent arg0) {      return null;    }      @Override    public int onStartCommand(Intent intent, int flags, int startId) {      // 該方法內(nèi)執(zhí)行耗時任務(wù)可能導(dǎo)致ANR(Application Not Responding)異常      long endTime = System.currentTimeMillis() + 20 * 1000;      System.out.println("onStart");      while (System.currentTimeMillis() < endTime) {        synchronized (this) {          try {            wait(endTime - System.currentTimeMillis());          } catch (InterruptedException e) {            e.printStackTrace();          }        }      }      System.out.println("----耗時任務(wù)執(zhí)行完成---");      return START_STICKY;    }  }  

運(yùn)行上述代碼,啟動MyIntentService的會使用單獨(dú)的worker線程,因此不會阻塞前臺的UI線程;而MyService會。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 横山县| 茌平县| 唐山市| 称多县| 开封市| 漳平市| 南安市| 东乌珠穆沁旗| 佛冈县| 新安县| 乌拉特中旗| 朝阳市| 绥芬河市| 沙坪坝区| 锡林浩特市| 高邮市| 龙陵县| 新宾| 临猗县| 五常市| 孟连| 泸西县| 永福县| 洪湖市| 濉溪县| 皮山县| 义马市| 思南县| 乌拉特中旗| 措勤县| 七台河市| 东乡县| 阳信县| 富民县| 林西县| 阳城县| 六盘水市| 黔东| 海原县| 梅河口市| 额尔古纳市|