IntentService的介紹與使用

在介紹IntentService之前杯道,我們都知道不管是何種service都是運行在UI線程中的匪煌。我們先要知道service,畢竟IntentService是繼承Service的党巾。首先萎庭,service一般是使用在我們需要應用在后臺時做一些操作。這里就不詳細介紹service的用法了齿拂。

既然service是完成后臺操作驳规,總避免不了處理一些耗時的操作,處理耗時操作在service中只能使用最常規(guī)的方法就是開一個線程(new Thread())進行處理署海,如果有多個操作吗购,還有開啟多個子線程或者在一個子線程中同步進行調(diào)用≡夷基于這個場景我們先來介紹下IntentService捻勉。

IntentService:異步處理服務,新開一個線程:handlerThread在線程中發(fā)消息刀森,然后接受處理完成后踱启,會清理線程,并且關掉服務。

IntentService有以下特點:

(1) 它創(chuàng)建了一個獨立的工作線程來處理所有的通過onStartCommand()傳遞給服務的intents埠偿。

(2) 創(chuàng)建了一個工作隊列透罢,來逐個發(fā)送intent給onHandleIntent()。

(3) 不需要主動調(diào)用stopSelft()來結(jié)束服務胚想。因為琐凭,在所有的intent被處理完后,系統(tǒng)會自動關閉服務浊服。

(4) 默認實現(xiàn)的onBind()返回null

(5) 默認實現(xiàn)的onStartCommand()的目的是將intent插入到工作隊列中

public class IntentServiceDemo extends IntentService {

public IntentServiceDemo() {  
    //必須實現(xiàn)父類的構造方法  
    super("IntentServiceDemo");  
}  

//提供了一個onBind()方法的默認實現(xiàn)统屈,它返回null
@Override  
public IBinder onBind(Intent intent) {  
    System.out.println("onBind");  
    return super.onBind(intent);  
}  


@Override  
public void onCreate() {  
    System.out.println("onCreate");  
    super.onCreate();  
}  

@Override  
public void onStart(Intent intent, int startId) {  
    System.out.println("onStart");  
    super.onStart(intent, startId);  
}  

//生成一個默認的且與主線程互相獨立的工作者線程來執(zhí)行所有傳送至 onStartCommand()的Intent。將intent先傳送至    工作隊列(onHandleIntent生成的))牙躺,然后從工作隊列中每次去出一個intent傳送給onHandleIntent進行處理愁憔。
@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
    System.out.println("onStartCommand");  
    return super.onStartCommand(intent, flags, startId);  
}  


@Override  
public void setIntentRedelivery(boolean enabled) {  
    super.setIntentRedelivery(enabled);  
    System.out.println("setIntentRedelivery");  
}  

//生成一個工作隊列來傳送Intent對象給你的onHandleIntent()方法,同一時刻只傳送一個Intent對象孽拷,這樣一來吨掌,不必 //擔心多線程的問題。
@Override
protected void onHandleIntent(Intent intent) {
//Intent是從Activity發(fā)過來的脓恕,攜帶識別參數(shù)膜宋,根據(jù)參數(shù)不同執(zhí)行不同的任務
String action = intent.getExtras().getString("param");
if (action.equals("oper1")) {
System.out.println("Operation1");
}else if (action.equals("oper2")) {
System.out.println("Operation2");
}

    try {  
        Thread.sleep(2000);  
    } catch (InterruptedException e) {  
        e.printStackTrace();  
    }  
}  

@Override  
public void onDestroy() {  
    System.out.println("onDestroy");  
    super.onDestroy();  
}  

}

//開啟IntentService的方式跟service是一樣的startService(intent);這個intent在onStartCommand中接收,然后生成一個工作隊列來傳送給onHandleIntent來進行處理炼幔,同一線程只能傳送一個intent的

//IntentService還有一個stopSelf()方法:在所有的請求(Intent)都被執(zhí)行完以后會自動停止服務秋茫,所以,你不需要自己去調(diào)用stopSelf()方法來停止該服務

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乃秀,一起剝皮案震驚了整個濱河市肛著,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跺讯,老刑警劉巖枢贿,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刀脏,居然都是意外死亡局荚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門愈污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來危队,“玉大人,你說我怎么就攤上這事钙畔。” “怎么了金麸?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵擎析,是天一觀的道長。 經(jīng)常有香客問我,道長揍魂,這世上最難降的妖魔是什么桨醋? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮现斋,結(jié)果婚禮上喜最,老公的妹妹穿的比我還像新娘。我一直安慰自己庄蹋,他們只是感情好瞬内,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著限书,像睡著了一般虫蝶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倦西,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天能真,我揣著相機與錄音,去河邊找鬼扰柠。 笑死粉铐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卤档。 我是一名探鬼主播蝙泼,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裆装!你這毒婦竟也來了踱承?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哨免,失蹤者是張志新(化名)和其女友劉穎茎活,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琢唾,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡载荔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了采桃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懒熙。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖普办,靈堂內(nèi)的尸體忽然破棺而出工扎,到底是詐尸還是另有隱情,我是刑警寧澤衔蹲,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布肢娘,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏橱健。R本人自食惡果不足惜而钞,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拘荡。 院中可真熱鬧臼节,春花似錦、人聲如沸珊皿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亮隙。三九已至途凫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溢吻,已是汗流浹背维费。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留促王,地道東北人犀盟。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像蝇狼,于是被迫代替她去往敵國和親阅畴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容