Android8.0以上版本啟動後臺service報IllegalStateException

山有木xi發表於2020-12-06

在寫後臺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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章