Android 之 Service(三)IntentService

除非我們特別為某個操作指定特定的線程宜岛,否則大部分線程都在前臺UI界面上的執(zhí)行操作。這可能存在某些隱患功舀,因為部分在UI界面上的耗時操作可能會影響界面的響應(yīng)性能萍倡。UI界面的性能問題會容易惹惱用戶,甚至可能導致系統(tǒng)ANR錯誤辟汰。為了避免這樣的問題列敲,Android Framework提供了幾個類,用來幫助你把那些耗時操作移動到后臺線程中執(zhí)行帖汞。那些類中最常用的就是IntentService.
IntentService是繼承于Service并處理異步請求的一個類戴而,在IntentService內(nèi)有一個工作線程來處理耗時操作,啟動IntentService的方式和啟動傳統(tǒng)Service一樣翩蘸,同時所意,當任務(wù)執(zhí)行完后,IntentService會自動停止催首,而不需要我們?nèi)ナ謩涌刂品鲇弧A硗猓梢詥覫ntentService多次郎任,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調(diào)方法中執(zhí)行秧耗,并且,每次只會執(zhí)行一個工作線程舶治,執(zhí)行完第一個再執(zhí)行第二個绣版,以此類推。

而且歼疮,所有請求都在一個單線程中,不會阻塞應(yīng)用程序的主線程(UI Thread)诈唬,同一時間只處理一個請求韩脏。

IntentService 優(yōu)點

1.不需要我們在Service中手動開線程的麻煩
2.當操作完成時,我們不用手動停止Service铸磅。

IntentService有下面幾個局限性:

1.不可以直接和UI做交互赡矢。為了把他執(zhí)行的結(jié)果體現(xiàn)在UI上杭朱,需要把結(jié)果返回給Activity。
2.工作任務(wù)隊列是順序執(zhí)行的吹散,如果一個任務(wù)正在IntentService中執(zhí)行弧械,此時你再發(fā)送一個新的任務(wù)請求,這個新的任務(wù)會一直等待直到前面一個任務(wù)執(zhí)行完畢才開始執(zhí)行空民。
3.正在執(zhí)行的任務(wù)無法打斷刃唐。

使用

1.創(chuàng)建IntentService

public class MyService extends IntentService {

    /**
     *重寫無參構(gòu)造函數(shù)
     */
    public MyService(){
        super("test");
    }
    /**
     * 創(chuàng)建一個IntentService。調(diào)用子類的構(gòu)造函數(shù)界轩。
     *
     * @param name 用于命名工作線程, 只有調(diào)試情況下使用.
     */
    public MyService(String name) {
        super(name);
    }
    @Override
    protected void onHandleIntent(Intent intent) {
        //任務(wù)隊列,此處可以進行耗時操作,并且自動排隊完成
        ......
        ......
    }
}

2.在Manifest文件中定義IntentService

 <service
            android:name=".MyService"
            android:exported="false"/>

在此<service>標簽并沒有包含任何intent filter画饥。因為發(fā)送任務(wù)給IntentService的Activity需要使用顯式Intent,所以不需要filter浊猾。這也意味著只有在同一個app或者其他使用同一個UserID的組件才能夠訪問到這個Service抖甘。

3.創(chuàng)建任務(wù)請求并發(fā)送到IntentService
例如在Activity中

   Intent intent = new Intent(this, DownService.class);
//                Bundle bundle = new Bundle();
//                bundle.putString("videlURL" , videoUrl);
//                bundle.putString("fileName" , fileName);
//                intent.putExtras(bundle);
   startService(intent);

當startService之后 我們的MyService 會執(zhí)行onHandleIntent方法,多次點擊會排隊之行該方法葫慎。

如果你打印LOG 并重寫 所有的 Service 生命周期方法衔彻,你會發(fā)現(xiàn),多次觸發(fā)startService(intent)的話偷办,onCreate方法只執(zhí)行了一次艰额,而onStartCommand方法執(zhí)行了兩次,開啟了兩個Work Thread爽篷,這就證實了之前所說的悴晰,啟動多次,但IntentService的實例只有一個逐工,這點跟Service是一致的铡溪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泪喊,隨后出現(xiàn)的幾起案子棕硫,更是在濱河造成了極大的恐慌,老刑警劉巖袒啼,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哈扮,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚓再,警方通過查閱死者的電腦和手機滑肉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摘仅,“玉大人靶庙,你說我怎么就攤上這事⊥奘簦” “怎么了六荒?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵护姆,是天一觀的道長。 經(jīng)常有香客問我掏击,道長卵皂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任砚亭,我火速辦了婚禮灯变,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钠惩。我一直安慰自己柒凉,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布篓跛。 她就那樣靜靜地躺著膝捞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愧沟。 梳的紋絲不亂的頭發(fā)上蔬咬,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音沐寺,去河邊找鬼林艘。 笑死,一個胖子當著我的面吹牛混坞,可吹牛的內(nèi)容都是我干的狐援。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼究孕,長吁一口氣:“原來是場噩夢啊……” “哼啥酱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厨诸,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤镶殷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后微酬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绘趋,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年颗管,在試婚紗的時候發(fā)現(xiàn)自己被綠了陷遮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦江,死狀恐怖拷呆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤茬斧,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站梗逮,受9級特大地震影響项秉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜慷彤,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一娄蔼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧底哗,春花似錦岁诉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至前标,卻和暖如春坠韩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炼列。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工只搁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俭尖。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓氢惋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親稽犁。 傳聞我的和親對象是個殘疾皇子焰望,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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