2017-10-03 6 views
0

私はJobSchedulerを使ってそれが生きているかどうかをチェックするアプリケーションを持っています。限り、それは例に働かなければならないよう:
Android 8のJobSchedulerの問題

  • ユーザーが最近使ったアプリ
  • スマートフォンが再起動されたか、バッテリが

を使い果たしたからアプリを削除とにかくアプリケーションは、すぐにそれが可能であるとして起動する必要があります。

JobSchedulerは完全に機能しました。しかし、sdk26の下でAndroidは私のアプリを起動しません。

解決策は何ですか? JobSchedulerを設定して強制的に私のJobServiceを起動するにはどうすればいいですか?

答えて

0

定期ジョブをスケジュールするときは、setPersisted(true)を使用します。これにより、再起動後もジョブのスケジュールが維持されます。注:RECEIVE_BOOT_COMPLETED許可が必要です。あなたのアプリケーションがインストールされた後は、スケジュールされたジョブがリブートしても永続的になるまで、一度それを開く必要があります。

JobInfo jobInfo = new JobInfo.Builder(
         JOB_ID, new ComponentName(context, MyJobService.class)) 
         .setPeriodic(30 * 60 * 1000) 
         .setPersisted(true) 
         .setRequiresBatteryNotLow(true) 
         .build(); 
+0

SDK 26ではどのように動作しますか?私が質問した理由は、アプリケーションが閉じられている(たとえばクラッシュしている)と、サービスがフォアグラウンドアプリを持っていないとジョブを開始しないというGoogleの政治です。 – Yura

+0

はい、SDK 26をターゲットとしたJob Schedulerを数ヶ月使用しています。私の仕事を永続化するように設定すると、起動時に自動的にスケジュールアップされ、アプリケーションがアップされます。クラッシュしたときに私のアプリケーションを話すことはできませんが、スワイプされたときには、サービスはスティッキーになっていてもスケジュールされたままです。私のアプリもシステムアプリであるため、動作が異なる場合があります。チャンスがあれば、システムのアプリスフィアの外でもう少し試してみるつもりです。 –

+0

申し訳ありませんが、もう少しテストを実行するのに時間がかかっていますが、今は私が持っているので、あなたはOreoで見た問題は見ていません。起動時にランチャアクティビティのonCreate()と(Nexus 6P Nov2017 Oreoユーザビルドを使用して非システムアプリとして)、setPersisted(true)が設定されている場合にジョブサービスをスケジュールすると、再起動すると同時に、最近のアプリからアプリをスワイプしたときに表示されます。私の仕事は最低15分間隔です。また、定義された制約を満たしていることを確認してください。あなたはあなたのJobServiceで何を実行していますか? –