Service简识、IntentService、Thread的區(qū)別和聯(lián)系

一救军、Service的介紹

Service的官方介紹中比較重要的兩點:

1.A Service is not a separate process. The Service object itself does 
  not imply it is running in its own process; unless otherwise specified, 
  it runs in the same process as the application it is part of.
2.A Service is not a thread. It is not a means itself to do work off 
  of the main thread (to avoid Application Not Responding errors).

簡單翻譯一下
1.Service不是一個單獨的進程 财异,服務對象本身并不意味著它運行在自己的進程倘零,除非另有規(guī)定唱遭,它運行在同一進程中作為應用程序的一部分。
2.Service不是一個線程呈驶,所以我們應該避免在Service里面進行耗時的操作拷泽。
重點注意:Service不是一個線程,不能直接處理耗時的操作袖瞻。

二司致、IntentService的用法

簡單說,IntentService是繼承于Service并處理異步請求的一個類聋迎,在IntentService內(nèi)有一個工作線程來處理耗時操作脂矫,啟動IntentService的方式和啟動傳統(tǒng)Service一樣,同時霉晕,當任務執(zhí)行完后庭再,IntentService會自動停止,而不需要我們?nèi)ナ謩涌刂莆摺A硗庵羟幔梢詥覫ntentService多次,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調(diào)方法中執(zhí)行伟葫,并且恨搓,每次只會執(zhí)行一個工作線程,執(zhí)行完第一個再執(zhí)行第二個,以此類推斧抱。
而且常拓,所有請求都在一個單線程中,不會阻塞應用程序的主線程(UI Thread)辉浦,同一時間只處理一個請求墩邀。
那么,用IntentService有什么好處呢盏浙?首先眉睹,我們省去了在Service中手動開線程的麻煩,第二废膘,當操作完成時竹海,我們不用手動停止Service。
IntentService的源碼

private final class ServiceHandler extends Handler {
        public ServiceHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            onHandleIntent((Intent)msg.obj);
            stopSelf(msg.arg1);
        }
    }

@Override
    public void onCreate() {
        // TODO: It would be nice to have an option to hold a partial 
        // wakelock during processing, and to have a static 
        // startService(Context, Intent) method that would launch 
        // the service & hand off a wakelock.

        super.onCreate();
        HandlerThread thread = 
                new HandlerThread("IntentService[" + mName + "]");
        thread.start();

        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
    }

@Override
    public void onStart(Intent intent, int startId) {
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        mServiceHandler.sendMessage(msg);
    }

這就是IntentService丐黄,一個方便我們處理業(yè)務流程的類斋配,它是一個Service,但是比Service更智能灌闺。

三艰争、Thread和Service的區(qū)別

Thread:Thread 是程序執(zhí)行的最小單元,它是分配CPU的基本單位桂对∷ψ浚可以用 Thread 來執(zhí)行一些異步的操作。
Service:Service 是android的一種機制蕉斜,當它運行的時候如果是Local Service逾柿,那么對應的Service 是運行在主進程的 main 線程上的。如:onCreate宅此,onStart 這些函數(shù)在被系統(tǒng)調(diào)用的時候都是在主進程的 main 線程上運行的机错。如果是Remote Service,那么對應的 Service 則是運行在獨立進程的 main 線程上父腕。
那么為什么我們不直接用Thread而要用Service呢弱匪?其實這跟 android 的系統(tǒng)機制有關,我們先拿Thread 來說璧亮。Thread 的運行是獨立于 Activity 的萧诫,也就是說當一個 Activity 被 finish 之后,如果你沒有主動停止 Thread 或者 Thread 里的 run 方法沒有執(zhí)行完畢的話杜顺,Thread 也會一直執(zhí)行财搁。因此這里會出現(xiàn)一個問題:當 Activity 被 finish 之后,你不再持有該 Thread 的引用躬络。另一方面尖奔,你沒有辦法在不同的 Activity 中對同一 Thread 進行控制。
Thread和Service的使用場景:
1、在應用中提茁,如果是長時間的在后臺運行淹禾,而且不需要交互的情況下,使用服務茴扁。同樣是在后臺運行铃岔,不需要交互的情況下,如果只是完成某個任務峭火,之后就不需要運行毁习,而且可能是多個任務,需要長時間運行的情況下使用線程卖丸。
2纺且、如果任務占用CPU時間多,資源大的情況下稍浆,要使用線程载碌。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衅枫,隨后出現(xiàn)的幾起案子嫁艇,更是在濱河造成了極大的恐慌,老刑警劉巖弦撩,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件步咪,死亡現(xiàn)場離奇詭異,居然都是意外死亡孤钦,警方通過查閱死者的電腦和手機歧斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門纯丸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏形,“玉大人,你說我怎么就攤上這事觉鼻】∨ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵坠陈,是天一觀的道長萨惑。 經(jīng)常有香客問我,道長仇矾,這世上最難降的妖魔是什么庸蔼? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮贮匕,結果婚禮上姐仅,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好掏膏,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布劳翰。 她就那樣靜靜地躺著,像睡著了一般馒疹。 火紅的嫁衣襯著肌膚如雪佳簸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天颖变,我揣著相機與錄音生均,去河邊找鬼。 笑死腥刹,一個胖子當著我的面吹牛疯特,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肛走,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼漓雅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朽色?” 一聲冷哼從身側響起邻吞,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葫男,沒想到半個月后抱冷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡梢褐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年旺遮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盈咳。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡耿眉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鱼响,到底是詐尸還是另有隱情鸣剪,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布丈积,位于F島的核電站筐骇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏江滨。R本人自食惡果不足惜铛纬,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唬滑。 院中可真熱鬧告唆,春花似錦莫秆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茄螃,卻和暖如春缝驳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归苍。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工用狱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拼弃。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓夏伊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吻氧。 傳聞我的和親對象是個殘疾皇子溺忧,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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

  • 本文出自 Eddy Wiki ,轉載請注明出處:http://eddy.wiki/interview-androi...
    eddy_wiki閱讀 3,270評論 0 20
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • 我是一個喜歡自己旅行的姑娘盯孙,每到一個陌生的城市鲁森,有三類地方是我一定要去的:大學、博物館和獨立書店振惰。 今天為大家推薦...
    落_蘇_閱讀 811評論 0 5
  • 三件事積累很重要 做“三件事”之前要確定“想做歌溉、該做、必須做的事情”中間骑晶,哪三件事最最重要 做三件事的時候用woo...
    唐花花閱讀 182評論 0 0
  • 傷高恨遠幾時窮?有人更加濃痛垛。 愁緒也引千絲亂,更心慌桶蛔,飛葉黃黃匙头。 漸遠漸離,就算呻吟羽圃,老人將退離! 兒小嬉戲橋邊水...
    一度一閱讀 274評論 0 0