Могу ли я сделать все, что BroadcastReceiver может сделать с JobScheduler? - PullRequest
0 голосов
/ 30 мая 2018

У меня есть приложение, которое использует BroadcastReceiver (для краткости BR) зарегистрировано в манифесте с intent-filter ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED.

Этот BR запускает Service, когда телефон подключен, а когда телефон отключен, он останавливает Service.

Этот Service регистрирует другой BR с помощью ACTION_BATTERY_CHANGED, Я сделал это, потому что хочу зарегистрировать ACTION_BATTERY_CHANGED BR, когда телефон заряжается, и я использовал Service, чтобы сохранить его зарегистрированным, даже если приложение закрыто / уничтожено.

Приложение прекрасно работает для всех уровней API , кроме 27.

Я знаю, что в API 27 есть что-то с BRs, например, некоторые ограничения, поэтому япопытался выяснить, что именно работает, а что нет.

Я понял, что первый BR (тот, что в манифесте ) никогда не регистрируется, идругой работает (я также запускаю метод Service in onCreate основного действия, поэтому второй BR регистрируется при открытии приложения) но когда я закрываю приложение, Service автоматически останавливается / уничтожается, и, таким образом, второй BR отменяется регистрация.

В API уровень ниже 27 Serviceне был автоматически остановлен / уничтожен.

Кто-то сказал мне:

Почему бы вам не попробовать IntentService ...

, а затемон сказал:

Вы знаете, эта идея глупа, не пытайтесь.

Так что я не пробовал.

Всев сети говорят, что используйте JobScheduler, и после небольшого взгляда на JobScheduler я почувствовал, что JobScheduler отличается от BRs

Так что мой вопрос Могу ли я сделать все BroadcastReceiver можно сделать с JobScheduler? Я имею в виду, могу ли я сделать все мое приложение без BRs, но с JobScheduler.

1 Ответ

0 голосов
/ 30 мая 2018

Нет, JobScheduler здесь не для замены BroadcastReceiver.

BroadcastReceiver, чтобы уведомлять вас о System/Custom Определенном наборе событий, чтобы вы могли выполнять некоторые задачи на основе этого.

JobScheduler позволяет вам Schedule выполнить некоторое задание, которое будет выполнено при достижении Defined Criteria.

Просто посмотрите на определение, могут быть некоторые совпадения в их рабочей области, но два выполняются очень раздельноФункции.

Редактировать для комментария: -

Вы можете сделать это, используя JobScheduler, потому что это позволяет выполнять некоторые задачи при подключении зарядного устройства.

val jobBuilder = JobInfo.Builder(JOB_ID, ComponentName(this, SyncServices::class.java))
jobBuilder.setRequiresCharging(true)
val ss = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
ss.schedule(jobBuilder.build())

Это запустится SyncServices при подключении зарядного устройства.

Теперь из служб синхронизации вы можете выполнить некоторую задачу и, наконец, вернуть статус, когда задача выполнена или нет, на основании того, что она будет вызвана снова.Вы можете найти подробную информацию о JobScheduler в (https://developer.android.com/reference/android/app/job/JobScheduler)[here].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...