android之IntentService

爲什麼使用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();
    }
}
發佈了38 篇原創文章 · 獲贊 18 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章