приложение было закрыто JobService периодически не работает

Из https://github.com/hadley/devtools/blob/master/R/utils.r

"%||%" <- function(a, b) if (!is.null(a)) a else b

Это внутренняя функция, поэтому вы, вероятно, необходимо переопределить его для себя, если вы хотите использовать его вне пакета.

"%||%" <- devtools:::`%||%`
1 %||% NULL
## [1] 1
NULL %||% 2
## [1] 2

1
задан kathir 5 March 2019 в 05:13
поделиться

1 ответ

В вашем сервисе Job верните true в onStartJob.

 override fun onStartJob(jobParameters: JobParameters): Boolean {
     return true
    }

также переопределяют onStartCommand, например,

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
        return Service.START_STICKY
    }

, и для явного кода записи, например,

<service
    android:name=".JobServiceEx"
    android:permission="android.permission.BIND_JOB_SERVICE"/>

. Ваш сервис будет выглядеть следующим образом для кода Колина

class JobServiceEx : JobService() {

   var startTime: Long = 0
   val workHandler = Handler()
   var workRunnable: Runnable? = null

// Called by the Android system when it's time to run the job
override fun onStartJob(jobParameters: JobParameters): Boolean {
    Log.d(TAG, "Job started!")

    workRunnable  = object : Runnable {

        override fun run() {
            val millis = System.currentTimeMillis() - startTime
            var seconds = (millis / 1000).toInt()
            val minutes = seconds / 60
            seconds %= 60
            var curTime = "$seconds"
            Toast.makeText(baseContext, "Current Sec : $curTime", Toast.LENGTH_SHORT).show()
            Log.e("TAG", "Current Time : $curTime")
            workHandler.postDelayed(this, 1000)
        }
    }
    workHandler.post(workRunnable)

    return true
}

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
    return Service.START_STICKY
}




// Called if the job was cancelled before being finished
override fun onStopJob(jobParameters: JobParameters): Boolean {

    workHandler.removeCallbacks(workRunnable);

    return false
}

companion object {
    private val TAG = JobServiceEx::class.java.simpleName
 }
}

и запускает и останавливает сервис следующим образом

   R.id.buttonStart -> {

            /**
             * start job service to test
             */
            var componentName = ComponentName(this, JobServiceEx::class.java)
            var jobInfo: JobInfo? = null

            jobInfo = JobInfo.Builder(JOB_ID, componentName)
                .setRequiresCharging(true)
                .setMinimumLatency(1)
                .setOverrideDeadline(1)
                .build()

            var jobScheduler = getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler
            var resultCode = jobScheduler.schedule(jobInfo);
            if (resultCode == JobScheduler.RESULT_SUCCESS) {
                Log.e("TAG", "Job scheduled!");
            } else {
                Log.e("TAG", "Job not scheduled");
            }


        }
        R.id.buttonStop -> {

            /**
             * stop job service to test
             */
            val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
            jobScheduler.cancel(JOB_ID)

        }
0
ответ дан Hemendra Gangwar 5 March 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: