1. 程式人生 > >解決java.lang.IllegalStateException: Not allowed to start service Intent xxxx app is in background u

解決java.lang.IllegalStateException: Not allowed to start service Intent xxxx app is in background u

問題描述

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()); 
        }
    }

重新執行就不會報錯啦~