Android8.0以上版本啟動後臺service報IllegalStateException
在寫後臺service相關時,突然在Android8.0以上的裝置發現一個神奇的問題,機率報以下異常
java.lang.IllegalStateException,Not allowed to start service Intent
最開始百思不得其解,後來發現這個問題只發生在Android8.0以上的版本,所以就去找Android8.0究竟修改了什麼東西,最終找到了,在Android8.0中谷歌對後臺service進行了嚴格限制,不允許默默無聞的後臺service存在
而解決方案就是
if (Build.VERSION.SDK_INT >= 26) { startForegroundService(intent); } else { startService(intent); }
使用startForegroundService,啟動一個前臺服務,這個時候系統就允許應用在後臺執行而不報異常
但是在使用startForegroundService後,發現,五秒左右還是會報一個ANR異常,而且每次都是剛剛好五秒左右,於是又接著尋找答案
最後的答案是,官方需要在啟動service建立服務後的五秒內呼叫startforground,如果不呼叫則就會發生ANR
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2739836/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java.lang.IllegalStateException: Service id not legal hostnameJavaException
- GC啟動報OEM 503 Service UnavailableGCAI
- MySQL 5.1.6以上版本動態開啟慢查詢日誌MySql
- Service啟動流程
- MySQL 5.1.6以上版本動態開啟慢查詢日誌薦MySql
- Android8.0 後臺服務保活的一種思路Android
- solidDB 後臺啟動程式Solid
- PHPExcel 在 PHP7.0 以上版本報錯PHPExcel
- Mac os 升級到11.0版本後 啟動擴充套件報錯Mac套件
- 解決okhttp報java.lang.IllegalStateException: closed,java.lang.IllegalStateException: closedHTTPJavaException
- Android深入四大元件(七)Android8.0 根Activity啟動過程(後篇)Android元件
- oracle 10g以上版本,awr報告使用Oracle 10g
- 自動啟動ORACLE Script ServiceOracle
- 一臺AppManager伺服器斷電後,啟動Mysql報錯APP伺服器MySql
- Windows 下快速後臺啟動 RedisWindowsRedis
- BroadcaseReceiver中(後臺)啟動Activity
- Service啟動過程分析
- EBS財務後臺動作(未完成版本)
- PHP 5.3以上版本推薦使用mysqlnd驅動PHPMySql
- nacos版本也是2.0.0 啟動報[NACOS HTTP-POST]HTTP
- Android Service的啟動過程Android
- Java Web之tomcat開機後臺啟動JavaWebTomcat
- CRS啟動的三個主要的後臺程式
- Hive1.2.1 啟動報錯 ClassNotFoundException: org.apache.hadoop.hive.service.HiveServerHiveExceptionApacheHadoopServer
- 在docker中啟動服務報錯:New main PID 558 does not belong to serviceDockerAI
- Oracle RAC的自定義service自啟動Oracle
- Powercenter8.1.1之啟動Service initialization failedAI
- vue-cli 啟動gzip壓縮,及後臺配置Vue
- Android SERVICE後臺服務程式的守護Android
- MongoDB 3.4版本小技巧之如何開啟http serviceMongoDBHTTP
- Google:2018年9月Android8.0及以上系統佔比接近20%GoAndroid
- 【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動NodeJSAPP
- 遠端啟動命令,讓命令程式在後臺執行
- Android 8.0 原始碼分析 (五) Service 啟動Android原始碼
- 【Android原始碼】Service的啟動過程Android原始碼
- Android中Service的啟動方式及Activity與Service的通訊方式Android
- service mysql start出錯,mysql啟動不了,解決mysql: unrecognized service錯誤MySqlZed
- tomcat啟動超時以及啟動之後開啟網頁報404錯誤的解決方法Tomcat網頁