3

私は Evernote lib から android-job を持っています。ジョブは、特定の状況で定期的に実行されるように設定されています。したがって、ジョブビルドは、定期的にジョブを開始したい場合にのみ呼び出されます (これはアプリの開始時ではありません)。

JobService を作成します。

class JobService : Job() {

    companion object {

        private var jobId = 0

        fun scheduleJobPeriodically(ms: Long) {
            if (jobRequested()) {
                cancelJob()
            }
            jobId = JobRequest.Builder("JOB_TAG")
                    .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
                    .setPeriodic(ms, TimeUnit.MINUTES.toMillis(5))
                    .setRequirementsEnforced(true)
                    .build()
                    .schedule()
        }

        fun cancelJob() {
            JobManager.instance().cancel(jobId)
        }

    }

    override fun onRunJob(params: Params): Result {
        Timber.d(">>>>>>>>>>>Job is Running")
        Result.SUCCESS
    }
}

JobCreator:

class MyJobCreator : JobCreator {
  override fun create(tag: String): Job? {
    return when (tag) {
        "JOB_TAG" -> {
            JobService()
        }
        else -> null
    }
 }
}

アプリケーション クラスで、ジョブを登録するために必要な行を追加します。

JobManager.create(this).addJobCreator(MyJobCreator())

この時点で、アプリケーションが開始され、JobService クラスが作成されます。(OK)しかし、このクラスには、このメソッドscheduleJobPeriodicallyがあり、このメソッドは起動されますが、明示的に起動しないため、起動されるべきではありません。アプリをデバッグ モードで起動しましたが、ジョブのタグを設定する JobRequestBuilder だけでなく、定期的な作成が直接呼び出されていないことも確かです。しかし、onRunJobのコードが起動され、それが問題です。

少し早いですがお礼を。

4

0 に答える 0