【原創(chuàng)】JobIntentService使用

最近App出現(xiàn)了一個線上crash掘鄙,日志如下:

java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.xxx.xx/.core.service.NotifyJobService }: app is in background uid UidRecord{6dd5849 u0a172 TPSL idle change:idle|cached procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1628)
at android.app.ContextImpl.startService(ContextImpl.java:1569)
at android.content.ContextWrapper.startService(ContextWrapper.java:675)
at com.xxx.xx.application.MainApp.onCreate(Unknown Source:385)
at com.baidu.protect.A.a(Native Method)
at com.baidu.protect.StubApplication.onCreate(StubApplication.java:296)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6273) ... 8 more

具體原因是因為從Android 8.0開始禁止應(yīng)用在后臺運行時創(chuàng)建Service铁孵。

網(wǎng)上的解決方案大致有以下幾種:
?1.通過Context.startForegroundService()方式啟動一個前臺Service,前臺Service的啟動沒有受到限制蹲盘。
?2.集成Google Firebase Messaging。
?3.使用JobIntentService。

?其中方案一最簡單柿隙,并且是國內(nèi)大多數(shù)blog博主推薦的解決方案叶洞,但是考慮到項目需求鲫凶,啟動一個前臺Service實在是不合適。
?方案二衩辟、三普遍被國外開發(fā)者所采用螟炫,但是Google Firebase畢竟在國內(nèi)使用會有諸多限制,于是個人決定采用方案三來解決艺晴。

JobIntentService

JobIntentService是Android 8.0 新加入的類昼钻,它也是繼承自Service,根據(jù)官方的解釋:

Helper for processing work that has been enqueued for a job/service. When running on Android O or later, the work will be dispatched as a job via JobScheduler.enqueue. When running on older versions of the platform, it will use Context.startService.

?大致是說JobIntentService用于執(zhí)行加入到隊列中的任務(wù)封寞。對Android 8.0及以上的系統(tǒng)然评,JobIntentService的任務(wù)將被分發(fā)到JobScheduler.enqueue執(zhí)行,對于8.0以下的系統(tǒng)狈究,任務(wù)仍舊會使用Context.startService執(zhí)行碗淌。

?JobIntentService具體使用起來非常簡單,它已經(jīng)封裝了大量的內(nèi)部邏輯,只需要調(diào)用enqueue()就可以了亿眠。

使用示例:
1.在Manifest中聲名Permission:
<uses-permission android:name="android.permission.WAKE_LOCK" />
2.在Manifest中聲名Service:
<service android:name=".YourService" android:permission="android.permission.BIND_JOB_SERVICE" />
3.實現(xiàn)JobIntentService類:

public class YourService extends JobIntentService {

    public static final int JOB_ID = 1;

    public static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, YourService.class, JOB_ID, work);
    }

    @Override
    protected void onHandleWork(@NonNull Intent intent) {
        // 具體邏輯
    }

}

4.需要調(diào)用的地方:
YourService.enqueueWork(context, new Intent());

?我們可以看到碎罚,JobIntentService的使用相比JobService簡化了很多,開發(fā)者甚至不需要關(guān)心JobIntentService的生命周期纳像,不需要startService()方法荆烈,也就避免了開頭中的crash問題,通過靜態(tài)方法就可以啟動竟趾,可以說是非常友好了憔购。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潭兽,隨后出現(xiàn)的幾起案子倦始,更是在濱河造成了極大的恐慌,老刑警劉巖山卦,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋邑,死亡現(xiàn)場離奇詭異,居然都是意外死亡账蓉,警方通過查閱死者的電腦和手機(jī)枚碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铸本,“玉大人肮雨,你說我怎么就攤上這事∠溏瑁” “怎么了怨规?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡足。 經(jīng)常有香客問我波丰,道長,這世上最難降的妖魔是什么舶得? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任掰烟,我火速辦了婚禮,結(jié)果婚禮上沐批,老公的妹妹穿的比我還像新娘纫骑。我一直安慰自己,他們只是感情好九孩,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布先馆。 她就那樣靜靜地躺著,像睡著了一般煤墙。 火紅的嫁衣襯著肌膚如雪缤底。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天个唧,我揣著相機(jī)與錄音,去河邊找鬼设预。 笑死徙歼,一個胖子當(dāng)著我的面吹牛鳖枕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宾符,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酿秸,長吁一口氣:“原來是場噩夢啊……” “哼魏烫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哄褒,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稀蟋,失蹤者是張志新(化名)和其女友劉穎呐赡,沒想到半個月后退客,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體链嘀,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年怀泊,在試婚紗的時候發(fā)現(xiàn)自己被綠了茫藏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片包个。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡刷允,死狀恐怖冤留,靈堂內(nèi)的尸體忽然破棺而出碧囊,到底是詐尸還是另有隱情,我是刑警寧澤纤怒,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布糯而,位于F島的核電站,受9級特大地震影響泊窘,放射性物質(zhì)發(fā)生泄漏熄驼。R本人自食惡果不足惜像寒,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓜贾。 院中可真熱鬧诺祸,春花似錦、人聲如沸祭芦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龟劲。三九已至胃夏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昌跌,已是汗流浹背仰禀。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蚕愤,地道東北人答恶。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像萍诱,于是被迫代替她去往敵國和親亥宿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355