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

首頁 > 系統 > Android > 正文

Android IntentService詳解及使用實例

2019-10-23 19:44:08
字體:
來源:轉載
供稿:網友

Android IntentService詳解

一、IntentService簡介

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

  • Service不會專門啟動一條單獨的進程,Service與它所在應用位于同一個進程中; 
  • Service也不是專門一條新線程,因此不應該在Service中直接處理耗時的任務;  

二、IntentService特征

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

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

繼承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) {      // 創建所需要啟動的Service的Intent      Intent intent = new Intent(this, MyService.class);      startService(intent);    }      public void startIntentService(View source) {      // 創建需要啟動的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會使用單獨的線程來執行該方法的代碼      // 該方法內執行耗時任務,比如下載文件,此處只是讓線程等待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("----耗時任務執行完成---");    }  }   

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) {      // 該方法內執行耗時任務可能導致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("----耗時任務執行完成---");      return START_STICKY;    }  }  

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

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴安县| 全州县| 横山县| 拉萨市| 大化| 阜平县| 玉林市| 三门峡市| 大竹县| 土默特左旗| 云梦县| 锡林郭勒盟| 图木舒克市| 南汇区| 梓潼县| 茶陵县| 涪陵区| 衡阳市| 卢龙县| 青海省| 鹤峰县| 辽宁省| 富锦市| 澄城县| 卢湾区| 龙山县| 仁寿县| 巧家县| 博客| 井陉县| 稷山县| 图木舒克市| 松原市| 林甸县| 探索| 东宁县| 鄂尔多斯市| 团风县| 星子县| 安仁县| 青冈县|