安卓四大組件之Service

  • 服務(wù)介紹

  • 服務(wù)類型

  • 服務(wù)基本用法

  • 服務(wù)生命周期

  • 服務(wù)更多技巧


  • 服務(wù)介紹
    服務(wù)是Android中實現(xiàn)程序后臺運行的解決方案媒抠,它非常適合用于去執(zhí)行那些不需要和用戶交互而且還要長期運行的任務(wù)宝穗。服務(wù)的運行不依賴任何用戶界面钞支,即使當程序被切換到后臺,或者用戶打開了另外一個應(yīng)用程序耘婚,服務(wù)仍然能后保持正常運行养铸。不過需要注意的是悠菜,服務(wù)并不是運行在一個獨立的進程中橄登,而是依賴于創(chuàng)建服務(wù)時所在的應(yīng)用程序進程抓歼。當某個應(yīng)用程序進程被殺掉時,所有依賴于該進程的服務(wù)也會停滯運行拢锹。另外服務(wù)并不會自動開啟線程谣妻,所有的代碼都是默認運行在主線程中。我們需要在服務(wù)內(nèi)部手動創(chuàng)建子線程卒稳,并在這里執(zhí)行具體的任務(wù)拌禾。
  • 服務(wù)類型
    使用范圍
    1.本地服務(wù):用于應(yīng)用程序內(nèi)部
    功能:用于實現(xiàn)應(yīng)用程序自己的一些耗時任務(wù),并不占用應(yīng)用程序比如Activity所屬線程展哭,而是單開線程后臺執(zhí)行。
    使用:在Service可以調(diào)用Context.startService啟動闻蛀,調(diào)用Context.stopService結(jié)束匪傍。在內(nèi)部可以調(diào)用Service.stopSelf或Service.stopSelfResult來自己停止。無論調(diào)用了多少次startService()觉痛,都只需調(diào)用一次stopService()來停止役衡。

2.遠程服務(wù)(Remote Sercie):用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間
功能:可被其他應(yīng)用程序復(fù)用,比如天氣預(yù)報服務(wù)薪棒,其他應(yīng)用程序不需要再寫這樣的服務(wù)手蝎,調(diào)用已有的即可。
使用:可以定義接口并把接口暴露出來俐芯,以便其他應(yīng)用進行操作棵介。客戶端建立到服務(wù)對象的連接吧史,并通過那個連接來調(diào)用服務(wù)邮辽。調(diào)用Context.bindService()方法建立連接,并啟動,以調(diào)用 Context.unbindService()關(guān)閉連接吨述。多個客戶端可以綁定至同一個服務(wù)岩睁。如果服務(wù)此時還沒有加載,bindService()會先加載它揣云。
運行類別
1.前臺服務(wù)
前臺服務(wù)需要調(diào)用startForeground或setForeground使服務(wù)成為前臺服務(wù)捕儒,使用前臺服務(wù)可以避免服務(wù)在后臺運行的時候被系統(tǒng)kill
2.后臺服務(wù)
后臺服務(wù)是處在后臺運行的。

  • 服務(wù)基本用法
    1.定義一個服務(wù)
public class MyService extends Service {
      @Ovierride
      public IBinder onBind(Intent intent) {
            return null;
      }
}

一個服務(wù)最常用到三個方法:onCreat邓夕、onStartCommand刘莹、onDestroy。onCreate會在服務(wù)創(chuàng)建的時候調(diào)用翎迁,onStartCommand方法會在每次服務(wù)啟動時候調(diào)用栋猖,onDestroy會在服務(wù)銷毀的時候調(diào)用。
2.服務(wù)需要在清單文件AndroidManfest.xml中進行注冊才能生效

  • 服務(wù)生命周期
    Service是不能自己啟動的汪榔,只能通過Context對象調(diào)用startService或者bindService方法來啟動蒲拉。
    1)startService:Service會經(jīng)歷onCreate->onStart。onCreate只調(diào)用一次痴腌,onstart可能會重復(fù)調(diào)用多次雌团。stopService:調(diào)用onDestroy。如果調(diào)用者自己直接退出而沒有調(diào)用stopService的話士聪,Service會一直在后臺運行锦援。該Service的調(diào)用者起來后可以再調(diào)用stopService來關(guān)閉Service。
    2)bindService:Service會經(jīng)歷onCreate->onBind剥悟,onBind將返回給客戶端一個IBind接口實例灵寺。會把調(diào)用者和Service綁定在一起,Context退出了区岗,Service會調(diào)用onUnbind->onDestroy略板。不可多次綁定
    3)在Service每一次的開啟關(guān)閉過程中,只有onStart可被多次調(diào)用(通過多次startService調(diào)用)慈缔,其他onCreate叮称,onBind,onUnbind藐鹤,onDestory在一個生命周期中只能被調(diào)用一次
    4)BroadcastReceiver只能通過startService啟動Service瓤檐,因為廣播本身生命周期很短,bind的話沒有意義
  • 服務(wù)更多技巧
    1.服務(wù)基本在后臺運行娱节,且優(yōu)先級低挠蛉。若出現(xiàn)內(nèi)存不足情況下會回收服務(wù)∫蘼可以使用前臺服務(wù)來避免回收碌秸。前臺服務(wù)會一直有一個正在運行的圖標在系統(tǒng)狀態(tài)欄顯示下拉狀態(tài)欄可以看到更加詳細的信息绍移,類似通知的效果
    2.使用IntentService。onHandleIntent方法里是在線程中執(zhí)行的讥电,不用擔(dān)心耗時程序異常問題ANR蹂窖。提供一個無參構(gòu)造好書,并且必須在其內(nèi)部調(diào)用父類的有參構(gòu)造函數(shù)
public class MyIntentService extents IntentService {
       public MyIntentService() {
            super("MyIntentService");
       }
       @Override
       public void onHandleIntent(Intent intent) {
       
       }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恩敌,一起剝皮案震驚了整個濱河市瞬测,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纠炮,老刑警劉巖月趟,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恢口,居然都是意外死亡孝宗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門耕肩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因妇,“玉大人,你說我怎么就攤上這事猿诸』楸唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵梳虽,是天一觀的道長址芯。 經(jīng)常有香客問我,道長窜觉,這世上最難降的妖魔是什么谷炸? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮禀挫,結(jié)果婚禮上旬陡,老公的妹妹穿的比我還像新娘。我一直安慰自己特咆,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布录粱。 她就那樣靜靜地躺著腻格,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啥繁。 梳的紋絲不亂的頭發(fā)上菜职,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音旗闽,去河邊找鬼酬核。 笑死蜜另,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嫡意。 我是一名探鬼主播举瑰,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔬螟!你這毒婦竟也來了此迅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旧巾,失蹤者是張志新(化名)和其女友劉穎耸序,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲁猩,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡坎怪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了廓握。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搅窿。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疾棵,靈堂內(nèi)的尸體忽然破棺而出戈钢,到底是詐尸還是另有隱情,我是刑警寧澤是尔,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布殉了,位于F島的核電站,受9級特大地震影響拟枚,放射性物質(zhì)發(fā)生泄漏薪铜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一恩溅、第九天 我趴在偏房一處隱蔽的房頂上張望隔箍。 院中可真熱鬧,春花似錦脚乡、人聲如沸蜒滩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俯艰。三九已至,卻和暖如春锌订,著一層夾襖步出監(jiān)牢的瞬間竹握,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工辆飘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啦辐,地道東北人谓传。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像芹关,于是被迫代替她去往敵國和親续挟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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

  • [文章內(nèi)容來自Developers] Service是一個可以在后臺執(zhí)行長時間運行操作而不提供用戶界面的應(yīng)用組件充边。...
    岳小川閱讀 865評論 0 7
  • 服務(wù)基本上分為兩種形式 啟動 當應(yīng)用組件(如 Activity)通過調(diào)用 startService() 啟動服務(wù)時...
    pifoo閱讀 1,272評論 0 8
  • 本文主要搜集記錄一下Android開發(fā)的四大組件:一庸推、Activity詳解二、Service詳解三浇冰、Broadca...
    AFinalStone閱讀 604評論 0 2
  • 適配器模式屬于接口模式的一種贬媒,什么是接口模式?通俗點講就是通過定義接口的形式來回調(diào)方法肘习,使用不同接口的方法提供的服...
    ReturnYHH閱讀 402評論 0 1
  • 這部書講述了老子的一生經(jīng)歷际乘,講述了老子是如何悟道的,這對我們后人理解老子的道是非常有幫助的漂佩。 一提到老子大家很多時...
    了行閱讀 191評論 0 0