JobService не повторяется - PullRequest
       35

JobService не повторяется

0 голосов
/ 18 октября 2018

В Android Oreo я хочу создать службу, которая периодически обновляет данные из сети.

class NetworkJobService : JobService() {
override fun onStopJob(p0: JobParameters?): Boolean {
    jobFinished(p0,true)
    return true
}

override fun onStartJob(p0: JobParameters?): Boolean {
    //Average working time 3 to 5 minutes
    NetworkConnect.connect()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doFinally {
                jobFinished(p0,true)
            }
            .subscribe({result->
                // Writes the parameters to the cache with the current time.
                Cache.write("result : $result")
            },{e->
                // Writes the parameters to the cache with the current time.
                Cache.write(e)
            })
     return true

    }
}

Эта служба регистрируется в расписании при запуске MainActivity.

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    jobSchedule()
    button.setOnClickListener { readLog() }
}

val interval = 1000 * 60 * 15L

private fun jobSchedule(){
    val jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
    val jobInfo = JobInfo.Builder(3,
            ComponentName(this, NetworkJobService::class.java))
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setPeriodic(interval)
            .build()
    jobScheduler.schedule(jobInfo)
}

private fun readLog(){
    //The log file is read line by line.
    Cache.read()
            .reversed()
            .toObservable()
            .subscribe({ text->
                Log.i("Service Log",text)
            },{

            })
}
}

Однако, когда я прочитал файл журнала и проверил результаты, служба работала только тогда, когда работала MainActivity.Другими словами, оно не было перенесено.

1) Запустите упражнение и просто выключите экран устройства

2) Запустите занятие и нажмите кнопку «Домой», чтобы вернуться к программе запуска.

3) Когда служба закрывается и приложение удаляется в окне многозадачности

Больше всего я хотел работать в случае 3), но в любом из вышеперечисленных случаев службы, которые яразыскиваемые не были перенесены.

Что я пропустил?

1 Ответ

0 голосов
/ 18 октября 2018

При работе с фоновыми потоками в Oreo, когда приложение отключено, вам необходимо запустить службы в качестве службы переднего плана. Здесь - это то же самое.По сути, покажите уведомление, чтобы пользователь знал, что ваше приложение пытается что-то сделать в фоновом режиме.Надеюсь, это поможет вам.

...