最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

調用startService會拋出IllegalStateException異常解決

 更新時間:2023年07月28日 11:22:17   作者:尹學姐  
這篇文章主要為大家介紹了調用startService會拋出IllegalStateException異常解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

調用startService會拋出IllegalStateException異常

startService可以很方便的啟動一個service服務,也可以運行在單獨的進程。

但是如果在后臺調用了startService,則很可能會拋出一個崩潰。

Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.test.broadservice/.MyService }: app is in background uid UidRecord{b67c471 u0a86 RCVR idle change:uncached procs:1 seq(0,0,0)}
        at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1577)
        at android.app.ContextImpl.startService(ContextImpl.java:1532)
        at android.content.ContextWrapper.startService(ContextWrapper.java:664)
        at android.content.ContextWrapper.startService(ContextWrapper.java:664)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

錯誤原因

Android8.0之后,系統(tǒng)增加了對后臺Service的限制,如果應用處于后臺,調用startService會拋出IllegalStateException。

意思是,在后臺的應用,不允許調用startService啟動一個后臺服務,否則就會拋出異常。

解決方法

1. 使用startForegroundService

使用方法比較簡單,這里就不列出代碼了。

有幾點需要注意:

  • 用此方法啟動前臺服務,會在用戶的通知欄上顯示
  • 必須在5s內(nèi)調用服務的startForeground方法,否則會發(fā)生ANR

2. 使用JobScheduler

使用JobScheduler可以實現(xiàn)在后臺運行任務。

定義一個JobService:

public class MyJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        return false;
    }
    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}

onStartJob

  • 運行在主進程,需要避免執(zhí)行耗時的操作。
  • 返回true:表示任務還在繼續(xù)執(zhí)行
  • 返回false:表示任務已執(zhí)行完
  • 執(zhí)行完之后,可以調jobFinished方法來通知系統(tǒng)任務已完成。

onStopJob:

  • 當條件不滿足的時候,會回調
  • 返回true:表示條件滿足時,再次執(zhí)行任務
  • 返回false:表示任務完全結束

注冊JobService

        <service
            android:name=".MyJobService"
            android:permission="android.permission.BIND_JOB_SERVICE" />

定義一個JobInfo

JobInfo.Builder builder = new JobInfo.Builder(111, new ComponentName(this, MyJobService.class));
// todo 設置任務的參數(shù)

將任務發(fā)布給系統(tǒng):

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());

3. 使用WorkManager

WorkManagerJobScheduler的升級版本,且支持多進程,可以將任務運行到單獨的進程中。具體使用方法可以參考之前的文章:應用退出后繼續(xù)運行后臺任務,來試試WorkManager吧!

總結

Android 8.0版本以上,在后臺調用startService會拋出IllegalStateException異常,需要改用其他的方式來使用。

常用的方法有如下三種:

  • startForegroundService: 這種方式會在用戶的通知欄顯示UI。
  • JobScheduler:可以實現(xiàn)后臺無感知運行任務。
  • WorkManagerJetpack里的庫,JobScheduler的升級版,支持多進程。

以上就是調用startService會拋出IllegalStateException異常解決的詳細內(nèi)容,更多關于startService IllegalStateException的資料請關注腳本之家其它相關文章!

相關文章

  • Android Studio如何快速導入jar和.so文件

    Android Studio如何快速導入jar和.so文件

    這篇文章主要介紹了Android Studio如何快速導入jar和.so文件的相關知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • 利用Android中的TextView實現(xiàn)逐字顯示動畫

    利用Android中的TextView實現(xiàn)逐字顯示動畫

    在安卓程序啟動的時候,想逐字顯示一段話,每個字都有一個從透明到不透明的漸變動畫。那如何顯示這個效果,下面一起來看看。
    2016-08-08
  • Listview的異步加載性能優(yōu)化

    Listview的異步加載性能優(yōu)化

    Android中ListView是使用平率最高的控件之一(GridView跟ListView是兄弟,都是繼承AbsListView),ListView優(yōu)化最有效的無非就是采用ViewHolder來減少頻繁的對view查詢和更新,緩存圖片加快解碼,減小圖片尺寸
    2016-01-01
  • android:layout_gravity和android:gravity的區(qū)別

    android:layout_gravity和android:gravity的區(qū)別

    本篇文章主要介紹了android中giavity和layout_gravity的區(qū)別。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android使用Intent傳遞組件大數(shù)據(jù)

    Android使用Intent傳遞組件大數(shù)據(jù)

    這篇文章主要介紹了Android使用Intent傳遞組件大數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容詳情,感興趣的朋友可以參考一下
    2022-07-07
  • Android手勢ImageView三部曲 第三部

    Android手勢ImageView三部曲 第三部

    這篇文章主要為大家詳細介紹了Android手勢ImageView三部曲的第三部,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android OkHttp代理與路由的徹底理解

    Android OkHttp代理與路由的徹底理解

    這篇文章主要為大家介紹了Android OkHttp代理與路由的徹底理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • RecyclerView的使用之HelloWorld

    RecyclerView的使用之HelloWorld

    RecyclerView是伴隨Android 5.0發(fā)布的新控件,是一種列表容器,Google意在用新的RecyclerView來取代老舊的ListView和GridView,它的使用靈活性和性能都要優(yōu)于ListView,通過本文給大家介紹RecyclerView的使用之HelloWorld,需要的朋友參考下
    2016-03-03
  • Android Studio 3.0上分析內(nèi)存泄漏的原因

    Android Studio 3.0上分析內(nèi)存泄漏的原因

    本篇文章主要介紹了Android Studio 3.0上分析內(nèi)存泄漏的原因,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Kotlin設計模式之委托模式使用方法詳解

    Kotlin設計模式之委托模式使用方法詳解

    Kotlin提供了兩個本機功能來實現(xiàn)委托模式,第一個是接口委托(例如策略模式),另一種是屬性委托,它專注于類成員/屬性(例如延遲加載、observable等),它們共同提供了一組豐富而簡潔的功能,通過本博客,您將了解在什么情況下使用此模式
    2023-09-09

最新評論

佛坪县| 汶川县| 吉隆县| 陇西县| 嘉峪关市| 康定县| 五家渠市| 韶山市| 扎囊县| 沽源县| 敖汉旗| 宁国市| 枞阳县| 邛崃市| 石阡县| 西华县| 滕州市| 湘乡市| 江源县| 新源县| 通江县| 东阿县| 锡林郭勒盟| 宁武县| 杂多县| 宁德市| 同德县| 平度市| 文水县| 泸水县| 尉氏县| 城固县| 苏州市| 永顺县| 清苑县| 恩施市| 黄龙县| 丰镇市| 莆田市| 岑溪市| 桃园县|