IntentService面試知識小結

今天我們來回顧複習下IntentService,它是一個特殊Service,繼承自Service並且是個抽象類。它可用於執行後臺耗時任務,當任務執行完畢後會自動停止。由於IntentService是服務的原因,所以它的優先級比單純的線程高,不容易被系統殺死,比較適合執行一些高優先級的後臺任務。

一、什麼是IntentService?

1、它是一個特殊的Service,繼承自Service並且是個抽象類;

2、內部封裝了HandlerThread、Handler 實現異步操作;

3、內部有一個工作線程來處理耗時的後臺任務,任務完成後會自動停止;

4、可以多次啓動,IntentService 會按順序依次執行後臺任務;

二、IntentService使用方法

1、創建一個IntentService的子類,實現onHandlerIntent和構造方法。
2、在onHandleIntent( Intent intent)方法中,執行耗時操作,intent中可以取出啓動IntentService所攜帶的數據。

三、代碼實踐

1、創建MyIntentService 類繼承自intentservice。 在onHandleIntent方法中調用SystemClock.sleep(3000); 休眠3000秒,來模擬耗時操作,並在 onDestroy方法中打印服務停止的日誌。

package com.example.ling.review.intentservice;
import android.app.IntentService;
import android.content.Intent;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.util.Log;

public class MyIntentService extends IntentService {
    private static final String TAG = "MyIntentService";

    public MyIntentService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        String action = intent.getStringExtra("task_action");
        Log.d(TAG, "接收到任務:" + action + "開始執行!");
        SystemClock.sleep(3000); // 休眠3000秒,模擬耗時操作
        Log.d(TAG, action + "執行完畢!");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "服務已銷燬關閉! ");
    }
}

2、創建IntentServiceActivity 來測試,我們啓動3次service 。

package com.example.ling.review.intentservice;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class IntentServiceActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent service = new Intent(this, MyIntentService.class);
        // 啓動任務1
        service.putExtra("task_action", "任務1");
        startService(service);
        // 啓動任務2
        service.putExtra("task_action", "任務2");
        startService(service);
        // 啓動任務2
        service.putExtra("task_action", "任務3");
        startService(service);
    }
}

3、在manifest清單文件中進行註冊

<activity android:name=".intentservice.IntentServiceActivity"/>
<service android:name=".intentservice.MyIntentService" />

4、運行結果:

這裏寫圖片描述

總結:
通過打印的日誌我們發現多個任務時,它是串行執行的,所有的任務執行完成時,會自動停止服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章