service鄙炊遥活

簡介:

在Android Services (后臺服務(wù)) 里面因俐,我們了解了Android四大組件之一的Service榴嗅,知道如何使用后臺服務(wù)進行來完成一些特定的任務(wù)蔼水。但是后臺服務(wù)在系統(tǒng)內(nèi)存不足的時候,可能會被系統(tǒng)殺死录肯。那么如何讓后臺服務(wù)盡量不被殺死呢?基本的解決思路主要有以下幾種:

1. 提高Service的優(yōu)先級:

為防止Service被系統(tǒng)回收吊说,可以嘗試通過提高服務(wù)的優(yōu)先級解決论咏,1000是最高優(yōu)先級,數(shù)字越小颁井,優(yōu)先級越低
android:priority="1000"

2.把service寫成系統(tǒng)服務(wù)厅贪,將不會被回收:

在Manifest.xml文件中設(shè)置persistent屬性為true,則可使該服務(wù)免受out-of-memory killer的影響雅宾。但是這種做法一定要謹慎养涮,系統(tǒng)服務(wù)太多將嚴重影響系統(tǒng)的整體運行效率。

3.將服務(wù)改成前臺服務(wù)foreground service:

重寫onStartCommand方法眉抬,使用StartForeground(int,Notification)方法來啟動service贯吓。
注:一般前臺服務(wù)會在狀態(tài)欄顯示一個通知,最典型的應用就是音樂播放器蜀变,只要在播放狀態(tài)下悄谐,就算休眠也不會被殺,如果不想顯示通知库北,只要把參數(shù)里的int設(shè)為0即可爬舰。
同時们陆,對于通過startForeground啟動的service,onDestory方法中需要通過stopForeground(true)來取消前臺運行狀態(tài)情屹。
這個方案也是本文目前準備詳細介紹的坪仇。

4.利用Android的系統(tǒng)廣播
利用ANDROID的系統(tǒng)廣播檢查Service的運行狀態(tài),如果被殺掉垃你,就再起來椅文,系統(tǒng)廣播是Intent.ACTION_TIME_TICK,這個廣播每分鐘發(fā)送一次蜡镶,我們可以每分鐘檢查一次Service的運行狀態(tài)雾袱,如果已經(jīng)被結(jié)束了,就重新啟動Service官还。

二芹橡、前臺服務(wù)

1.what
前臺服務(wù)是那些被認為用戶知道(用戶所認可的)且在系統(tǒng)內(nèi)存不足的時候不允許系統(tǒng)殺死的服務(wù)。前臺服務(wù)必須給狀態(tài)欄提供一個通知望伦,它被放到正在運行(Ongoing)標題之下——這就意味著通知只有在這個服務(wù)被終止或從前臺主動移除通知后才能被解除林说。

2.why
在一般情況下,Service幾乎都是在后臺運行屯伞,一直默默地做著辛苦的工作腿箩。但這種情況下,后臺運行的Service系統(tǒng)優(yōu)先級相對較低劣摇,當系統(tǒng)內(nèi)存不足時珠移,在后臺運行的Service就有可能被回收。
那么末融,如果我們希望Service可以一直保持運行狀態(tài)且不會在內(nèi)存不足的情況下被回收時钧惧,可以選擇將需要保持運行的Service設(shè)置為前臺服務(wù)。

3.how
本文按照做音樂播放器的思路勾习,做一下相關(guān)的說明浓瞪,如何使用前臺服務(wù)。

在完成Notification通知消息的構(gòu)建后巧婶,在Service的onStartCommand中可以使用startForeground方法來讓Android服務(wù)運行在前臺乾颁。

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        startForeground(NOTIFICATION_ID, new Notification());
        //服務(wù)被kill掉后自動重啟;
        return START_REDELIVER_INTENT;
    }

如果需要停止前臺服務(wù),可以使用stopForeground來停止正在運行的前臺服務(wù)艺栈。

  @Override
    public void onDestroy() {
        super.onDestroy();
        stopForeground(true);
    }

到此為止英岭,我們基本上就學會了如何使用前臺服務(wù)了。

四:總結(jié)

  1. 前臺服務(wù)與普通服務(wù)的區(qū)別
    前臺Service的系統(tǒng)優(yōu)先級更高湿右、不易被回收巴席;
    前臺Service會一直有一個正在運行的圖標在系統(tǒng)的狀態(tài)欄顯示,下拉狀態(tài)欄后可以看到更加詳細的信息诅需,非常類似于通知的效果漾唉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荧库,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赵刑,更是在濱河造成了極大的恐慌分衫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件般此,死亡現(xiàn)場離奇詭異蚪战,居然都是意外死亡,警方通過查閱死者的電腦和手機铐懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門邀桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人科乎,你說我怎么就攤上這事壁畸。” “怎么了茅茂?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵捏萍,是天一觀的道長。 經(jīng)常有香客問我空闲,道長令杈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任碴倾,我火速辦了婚禮逗噩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跌榔。我一直安慰自己给赞,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布矫户。 她就那樣靜靜地躺著,像睡著了一般残邀。 火紅的嫁衣襯著肌膚如雪皆辽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天芥挣,我揣著相機與錄音驱闷,去河邊找鬼。 笑死空免,一個胖子當著我的面吹牛空另,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹋砚,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼扼菠,長吁一口氣:“原來是場噩夢啊……” “哼摄杂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起循榆,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤析恢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秧饮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體映挂,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年盗尸,在試婚紗的時候發(fā)現(xiàn)自己被綠了柑船。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡泼各,死狀恐怖鞍时,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情历恐,我是刑警寧澤寸癌,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站弱贼,受9級特大地震影響蒸苇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吮旅,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一溪烤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庇勃,春花似錦檬嘀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至罕拂,卻和暖如春揍异,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爆班。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工衷掷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柿菩。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓戚嗅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子懦胞,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345