1. ホーム
  2. android

[解決済み] Android 8.0: java.lang.IllegalStateException: Not allowed to start service Intent

2022-02-12 12:17:21

質問

アプリケーションの起動時に、ネットワークタスクを行うべきサービスを起動します。 APIレベル26をターゲットにした後、私のアプリケーションはAndroid 8.0のバックグラウンドでサービスを開始することに失敗しました。

<ブロッククオート

原因:java.lang.IllegalStateException: Not allowed to start サービス インテント { cmp=my.app.tt/com.my.service }: アプリはバックグラウンドにある uid UidRecord{90372b1 u0a136 CEM idle procs:1 seq(0,0,0)}: アプリがバックグラウンドで動作している。

に関連すると理解しています。 バックグラウンドの実行制限

startService() メソッドは、以下の場合 IllegalStateException をスローするようになりました。 Android 8.0 をターゲットとするアプリが、このメソッドを使用しようとしている状況です。 バックグラウンドサービスの作成が許可されていません。

" 許されない状況で " - 実際には何を意味するのでしょうか?また、それを修正する方法。私は自分のサービスをフォアグラウンドに設定したくありません。

どうすればいいですか?

許可された状況は、バックグラウンドサービスがAndroid O以前と同じ動作をする一時的なホワイトリストです。

特定の状況下で、バックグラウンドアプリは数分間、一時的なホワイトリストに掲載されます。アプリがホワイトリストに登録されている間は、制限なくサービスを起動でき、そのバックグラウンドサービスの実行が許可されます。アプリがホワイトリストに登録されるのは、次のような、ユーザーから見えるタスクを処理する場合です。

  • 優先度の高いFirebase Cloud Messaging(FCM)メッセージの処理。
  • SMS/MMSメッセージのようなブロードキャストを受信する。
  • 通知からPendingIntentを実行する。
  • VPNアプリがフォアグラウンドに昇格する前に、VpnServiceを開始する。

出典 https://developer.android.com/about/versions/oreo/background.html

つまり、バックグラウンド・サービスがホワイトリストの要件を満たしていない場合、新しい ジョブスケジューラ . これは基本的にバックグラウンド・サービスと同じですが、バックグラウンドで継続的に動作するのではなく、定期的に呼び出されるようになっています。

IntentServiceを使用している場合、JobIntentServiceに変更することができます。詳しくは @kosev さんの 答えは以下の通り .