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
- Android8.0 後臺服務保活的一種思路Android
- Service啟動流程
- Service啟動過程
- PHPExcel 在 PHP7.0 以上版本報錯PHPExcel
- Mac os 升級到11.0版本後 啟動擴充套件報錯Mac套件
- Google:2018年9月Android8.0及以上系統佔比接近20%GoAndroid
- PHP 5.3以上版本推薦使用mysqlnd驅動PHPMySql
- nacos版本也是2.0.0 啟動報[NACOS HTTP-POST]HTTP
- 【Linux】自定義開機啟動serviceLinux
- 在docker中啟動服務報錯:New main PID 558 does not belong to serviceDockerAI
- Android 8.0 原始碼分析 (五) Service 啟動Android原始碼
- Oracle RAC的自定義service自啟動Oracle
- 開啟IDEA工具的service執行spingboot啟動類Ideaboot
- 【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動NodeJSAPP
- Mysql啟動報錯:Job for mysqld.service failed because the control process exited with error code.MySqlAIError
- vue-cli 啟動gzip壓縮,及後臺配置Vue
- Application.onCreate()會造成Service啟動ANR麼?APP
- Android系統原始碼分析--Service啟動流程Android原始碼
- Android系統原始碼分析–Service啟動流程Android原始碼
- Android基礎知識:Service(3)啟動模式Android模式
- 用命令列啟動 docker 報錯:Redirecting to /bin/systemctl start docker.service 解決方法命令列Docker
- Springboot專案啟動後訪問Controller報錯404Spring BootController
- java.lang.IllegalStateException: closedJavaException
- 【Azure 應用服務】App Service服務無法啟動,開啟Kudu站點,App Service Editor 頁面均丟擲:The service is unavailableAPPAI
- Android Service重啟恢復(Service程式重啟)原理解析Android
- mac下啟動laradock失敗--Service ‘workspace‘ failed to buildMacAIUI
- mysql 8.0.11 以上版本修改root密碼MySql密碼
- Vagrant 啟動 VirtualBox 的問題 ( 誤裝 docker 後報錯 )Docker
- MacOS Big Sur11.0升級後Eclipse啟動報錯MacEclipse
- springboot在lunix後臺啟動,退出賬號也不關閉Spring Boot
- postman啟動載入很慢,更新替換版本後,資料丟失如何找回?Postman
- 如何讓Android的service一直在後臺執行?Android
- 從原始碼的角度看 Service 是如何啟動的原始碼
- mysql服務啟動報錯Redirecting to systemctl start mysqld.serviceFailed to start mysqld.service:Unit not found.MySqlAI
- 原創:Android怎麼讓一個service開機自動啟動Android
- postcss-bem外掛在webpack4以上版本報錯處理 .moveTo is not a functionCSSWebFunction
- PHP7 以上版本 使用 xdebug 踩坑PHP