爲什麼使用IntentService
我們知道Service的代碼默認是運行在主線程之中的,如果在service中處理一些比較耗時的操作,就很容易出現ANR的情況,所以這時候就需要讓這些耗時的工作放在子線程中。而我們往往又希望服務執行完後可以自動停下來,那麼我們創建的服務就會像這樣:
public class MyService extends Service{
@Override
public IBinder onBind(Intent intent){
return null;
}
@Override
public void onStartCommand(Intent intent,int flags,int startId){
new Thread(new Runnable{
@Override
public void run(){
//這裏處理耗時邏輯
stopself(); //執行後停下來
}
}).start();
return super.onStartCommand(intent,flags,startId);
}
}
那麼有沒有更簡單的更方便的方法讓創建一個異步,會自動停止的服務呢? 答案是IntentService。
使用IntentService
IntentService需要調用其父類的構造函數,然後在其子類中實現onHandleIntent()這個抽象方法,該方法運行在子線程中。最後還需要在AndroidmMainfest.xml中註冊IntentService。
public class MyIntentService extends IntentService{
public MyIntentService(){
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent){
//該函數的邏輯已經在子線程中運行了,可以處理一些耗時邏輯,而不用擔心ANR
}
@Override
public void onDestroy(){
super.onDestroy();
}
}