今天我們來回顧複習下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、運行結果:
總結:
通過打印的日誌我們發現多個任務時,它是串行執行的,所有的任務執行完成時,會自動停止服務。