3

利用可能なネットワークによってトリガーされる定期的なジョブを作成するために、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" />
4

0 に答える 0