利用可能なネットワークによってトリガーされる定期的なジョブを作成するために、firebase Job Dispatcher を使用しています。問題は、サービスが約 5 分間実行され、場合によってはそれより短い時間で完全に停止することです。ネットワークへの接続と切断を試みましたが、結果は同じです。
以前に収集したものから、次のコードは、利用可能なネットワーク (wifi) がある場合に定期的なタスクをトリガーすることになっています。バックグラウンド サービスの最適化のため、期間は正確ではありませんが、私が常に接続されています。しかし、そうではありません。私はまだ何時間もwifiに接続して電話で作業していますが、サービスは5分以上実行されません.
これは、公式ドキュメントに従ってコードを実装した方法です
私は両方compile 'com.firebase:firebase-jobdispatcher:0.5.2'
を
compile 'com.firebase:firebase-jobdispatcher-with-gcm-dep:0.5.2'
(明らかに同時にではなく)gradleファイルに追加しようとしました。
ジョブサービス
import com.firebase.jobdispatcher.JobParameters;
import com.firebase.jobdispatcher.JobService;
public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
// Do some work here
Toast.makeText(this, "The service is triggered now!",
Toast.LENGTH_LONG).show();
return false; // Answers the question: "Is there still work going on?"
}
@Override
public boolean onStopJob(JobParameters job) {
return false; // Answers the question: "Should this job be retried?"
}
}
マニフェスト
<service
android:exported="false"
android:name=".MyJobService">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>
これをアクティビティに追加しました:
// Create a new dispatcher using the Google Play driver.
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
Bundle myExtrasBundle = new Bundle();
myExtrasBundle.putString("some_key", "some_value");
Job myJob = dispatcher.newJobBuilder()
// the JobService that will be called
.setService(MyJobService.class)
// uniquely identifies the job
.setTag("my-unique-tag")
// this is a periodic job
.setRecurring(true)
// persist after device reboot
.setLifetime(Lifetime.FOREVER)
// start between 0 and 10 seconds from now
.setTrigger(Trigger.executionWindow(0, 10))
// don't overwrite an existing job with the same tag
.setReplaceCurrent(false)
// retry with exponential backoff
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
// constraints that need to be satisfied for the job to run
.setConstraints(
// only run on an unmetered network
Constraint.ON_UNMETERED_NETWORK,
)
.setExtras(myExtrasBundle)
.build();
dispatcher.mustSchedule(myJob);
ジョブを永続化するために、これもマニフェストに追加しました。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />