java.lang.IllegalStateExceptionを解決します:サービスの開始が許可されていませんインテントxxxxアプリがバックグラウンドにありますu



Solve Java Lang Illegalstateexception



問題の説明

java.lang.IllegalStateException:サービスの開始は許可されていませんインテントxxxxアプリはバックグラウンドuidUidRecordにあります

原因分析

Android8.0には次の調整があります。
バックグラウンドサービスの作成を許可せずにstartService()関数を使用しようとするAndroid 8.0アプリケーションは、IllegalStateExceptionを発生させます。



新しいContext.startForegroundService()関数は、フォアグラウンドサービスを開始します。これで、アプリがバックグラウンドで実行されている場合でも、システムはContext.startForegroundService()の呼び出しを許可します。

ただし、アプリケーションは、サービスの作成から5秒以内にサービスの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()) } }

再実行してもエラーは報告されません〜