開(kāi)啟處理耗時(shí)操作的方法--IntentService
一瑞眼、概述
-
能解決的問(wèn)題:
- 當(dāng)一個(gè)任務(wù)分為多個(gè)小任務(wù)材部,這些小任務(wù)必須按照一定順序來(lái)執(zhí)行妒峦,而且這些任務(wù)可能會(huì)比較耗時(shí)
-
為什么選擇這個(gè)方法:
- 利用這個(gè)方法無(wú)需手動(dòng)控制線程的執(zhí)行順序
- 如果是一個(gè)后臺(tái)任務(wù),交給Service去執(zhí)行扒披,因?yàn)镾ervice中也不能執(zhí)行耗時(shí)操作值依,所以還是需要開(kāi)啟子線程開(kāi)執(zhí)行,使用這個(gè)方法就可以忽略這個(gè)問(wèn)題
- 當(dāng)任務(wù)執(zhí)行完畢后會(huì)自動(dòng)關(guān)閉服務(wù)
- 從Activity中發(fā)送Intent之后就可以丟給后臺(tái)去處理碟案,就算當(dāng)前的Activity被finish掉也不會(huì)影響任務(wù)的執(zhí)行
二愿险、IntentService介紹
public abstract class IntentService extends Service
java.lang.Object
? android.content.Context
? android.content.ContextWrapper
? android.app.Service
? android.app.IntentService
API原版說(shuō)明:
IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.
This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.
All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.
中文翻譯:
IntentService是一個(gè)基本類,用來(lái)處理異步請(qǐng)求(用Intents來(lái)傳遞的)的服務(wù)价说×究鳎客戶端通過(guò)調(diào)用startService(Intent)來(lái)發(fā)送請(qǐng)求;當(dāng)需要的時(shí)候service被啟動(dòng)鳖目,使用一個(gè)工作者線程來(lái)依次處理每一個(gè)Intent扮叨;當(dāng)任務(wù)運(yùn)行完畢之后會(huì)自動(dòng)關(guān)閉。
這個(gè)“工作隊(duì)列處理器”模式通常用來(lái)幫助處理應(yīng)用的主線程中的任務(wù)领迈。IntentService類是為了簡(jiǎn)化這個(gè)模式和照看結(jié)構(gòu)而存在的彻磁。通過(guò)繼承IntentService實(shí)現(xiàn)onHandleIntent(Intent)方法來(lái)使用它。IntentService將會(huì)接收Intents狸捅,創(chuàng)建一個(gè)工作者線程衷蜓,并在適當(dāng)?shù)臅r(shí)候(任務(wù)結(jié)束的時(shí)候)停止服務(wù)。
所有的請(qǐng)求都被一個(gè)單獨(dú)的工作者線程處理--他們或許需要足夠長(zhǎng)的時(shí)間來(lái)處理(并且不會(huì)阻塞應(yīng)用的主循環(huán))尘喝,但是同一時(shí)間只能處理一個(gè)請(qǐng)求
三磁浇、IntentService的使用方法
當(dāng)然到了最關(guān)心的了--用法
-
創(chuàng)建一個(gè)類,繼承IntentService朽褪,注意的是這里需要寫(xiě)一個(gè)無(wú)參的構(gòu)造方法扯夭,不然會(huì)報(bào)錯(cuò)
public class HandleTaskService extends IntentService { // 繼承自父類的方法 public HandleTaskService(String name) { super(name); } // 注:這里要添加 public HandleTaskService(){ super("HandleTaskService"); } }
-
實(shí)現(xiàn)最關(guān)鍵的處理方法
@Override protected void onHandleIntent(Intent intent) { // 這里寫(xiě)你的代碼處理邏輯 }
-
IntentService繼承自Service鳍贾,所以同樣需要到AndroidManifest.xml中去注冊(cè)
<service android:name="com.hanvon.inputmethod.callaime.util.HandleTaskService" ></service>
-
調(diào)用方式:
Intent intent = new Intent(this, HandleTaskService.class); intent.addFlags(101); intent.putExtra("content", content); startService(intent);
附上生命周期圖:
圖片出處:http://blog.csdn.net/flowingflying/article/details/7616333