
前言
-
多線程的應用在Android開發(fā)中是非常常見的,常用方法主要有:
- 繼承Thread類
- 實現(xiàn)Runnable接口
- AsyncTask
- Handler
- HandlerThread
- IntentService
今天,我將手把手教你使用
IntentService(含實例介紹)。
Carson帶你學多線程系列
基礎(chǔ)匯總
Android多線程:基礎(chǔ)知識匯總
基礎(chǔ)使用
Android多線程:繼承Thread類使用(含實例教程)
Android多線程:實現(xiàn)Runnable接口使用(含實例教程)
復合使用
Android 多線程:AsyncTask使用教程(含實例講解)
Android 多線程:AsyncTask原理及源碼分析
Android多線程:HandlerThread使用教程(含實例講解)
Android多線程:HandlerThread原理及源碼分析
Android多線程:IntentService使用教程(含實例講解)
Android多線程:IntentService的原理及源碼分析
Android多線程:線程池ThreadPool全方位教學
相關(guān)使用
Android異步通信:這是一份全面&詳細的Handler機制學習攻略
Android多線程:手把手教你全面學習神秘的Synchronized關(guān)鍵字
Android多線程:帶你了解神秘的線程變量 ThreadLocal
目錄

1. 定義
Android里的一個封裝類,繼承四大組件之一的Service
2. 作用
處理異步請求 & 實現(xiàn)多線程
3. 使用場景
線程任務 需 按順序、在后臺執(zhí)行
- 最常見的場景:離線下載
- 不符合多個數(shù)據(jù)同時請求的場景:所有的任務都在同一個
Thread looper里執(zhí)行
4. 使用步驟
步驟1:定義 IntentService的子類,需復寫onHandleIntent()方法
步驟2:在Manifest.xml中注冊服務
步驟3:在Activity中開啟Service服務
5. 實例講解
步驟1:定義 IntentService的子類
傳入線程名稱、復寫
onHandleIntent()方法
public class myIntentService extends IntentService {
/**
* 在構(gòu)造函數(shù)中傳入線程名字
**/
public myIntentService() {
// 調(diào)用父類的構(gòu)造函數(shù)
// 參數(shù) = 工作線程的名字
super("myIntentService");
}
/**
* 復寫onHandleIntent()方法
* 根據(jù) Intent實現(xiàn) 耗時任務 操作
**/
@Override
protected void onHandleIntent(Intent intent) {
// 根據(jù) Intent的不同,進行不同的事務處理
String taskName = intent.getExtras().getString("taskName");
switch (taskName) {
case "task1":
Log.i("myIntentService", "do task1");
break;
case "task2":
Log.i("myIntentService", "do task2");
break;
default:
break;
}
}
@Override
public void onCreate() {
Log.i("myIntentService", "onCreate");
super.onCreate();
}
/**
* 復寫onStartCommand()方法
* 默認實現(xiàn) = 將請求的Intent添加到工作隊列里
**/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("myIntentService", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i("myIntentService", "onDestroy");
super.onDestroy();
}
}
步驟2:在Manifest.xml中注冊服務
<service android:name=".myIntentService">
<intent-filter >
<action android:name="cn.scu.finch"/>
</intent-filter>
</service>
步驟3:在Activity中開啟Service服務
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 同一服務只會開啟1個工作線程
// 在onHandleIntent()函數(shù)里,依次處理傳入的Intent請求
// 將請求通過Bundle對象傳入到Intent,再傳入到服務里
// 請求1
Intent i = new Intent("cn.scu.finch");
Bundle bundle = new Bundle();
bundle.putString("taskName", "task1");
i.putExtras(bundle);
startService(i);
// 請求2
Intent i2 = new Intent("cn.scu.finch");
Bundle bundle2 = new Bundle();
bundle2.putString("taskName", "task2");
i2.putExtras(bundle2);
startService(i2);
startService(i); //多次啟動
}
}
測試結(jié)果

6. 對比
此處主要講解IntentService與四大組件Service、普通線程的區(qū)別。
6.1 與Service的區(qū)別

6.2 與其他線程的區(qū)別

7. 總結(jié)
- 本文主要 全面介紹了多線程
IntentService用法 - 下一篇文章我將對講解
Android多線程的相關(guān)知識,感興趣的同學可以繼續(xù)關(guān)注Carson_Ho的簡書
Carson帶你學多線程系列
基礎(chǔ)匯總
Android多線程:基礎(chǔ)知識匯總
基礎(chǔ)使用
Android多線程:繼承Thread類使用(含實例教程)
Android多線程:實現(xiàn)Runnable接口使用(含實例教程)
復合使用
Android 多線程:AsyncTask使用教程(含實例講解)
Android 多線程:AsyncTask原理及源碼分析
Android多線程:HandlerThread使用教程(含實例講解)
Android多線程:HandlerThread原理及源碼分析
Android多線程:IntentService使用教程(含實例講解)
Android多線程:IntentService的原理及源碼分析
Android多線程:線程池ThreadPool全方位教學
相關(guān)使用
Android異步通信:這是一份全面&詳細的Handler機制學習攻略
Android多線程:手把手教你全面學習神秘的Synchronized關(guān)鍵字
Android多線程:帶你了解神秘的線程變量 ThreadLocal
歡迎關(guān)注Carson_Ho的簡書
不定期分享關(guān)于安卓開發(fā)的干貨,追求短、平、快,但卻不缺深度。
