解決java.lang.IllegalStateException: Not allowed to start service Intent xxxx app is in background u
阿新 • • 發佈:2018-11-01
問題描述
java.lang.IllegalStateException: Not allowed to start service Intent xxxx app is in background uid UidRecord
原因分析
Android 8.0 有以下調整:
Android 8.0 的應用嘗試在不允許其建立後臺服務的情況下使用 startService() 函式,則該函式將引發一個 IllegalStateException。
新的 Context.startForegroundService() 函式將啟動一個前臺服務。現在,即使應用在後臺執行,系統也允許其呼叫 Context.startForegroundService()。
不過,應用必須在建立服務後的五秒內呼叫該服務的 startForeground() 函式。
解決方案
- 所以需要在啟動服務的地方新增判斷過濾
import android.content.Intent; import android.os.Build; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context.startForegroundService(new Intent(context, ServedService.class)); } else { context.startService(new Intent(context, ServedService.class)); }
- 在服務的內部類oncreate方法上也需要新增過濾
import android.app.Notification;
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForeground(1,new Notification());
}
}
重新執行就不會報錯啦~