Ответ 1
На самом деле Firebase Android JobDispatcher - это слой абстракции вокруг механизмов планирования заданий на Android. И пока у них есть только одна реализация драйвера для GCM Network Manager. Это означает, что в настоящее время он ведет себя так же, как ведет себя менеджер GCM Network Manager. Надеюсь, в будущем будет реализовано больше драйверов.
1. Может ли работа иметь параметры, которые остаются с ней и могут даже быть изменены по мере необходимости? Они говорят в образце "Дополнительный комплект поставляемых пользователем дополнений. По умолчанию используется пустой пакет"., Это так? Может ли он быть изменен заданием после его выполнения?
- Да,
Job.Builder
имеет методsetExtras
с произвольным набором, к которому позже можно получить доступ черезjobParameters.getExtras()
. Вы не можете изменить пакет (jobParameters
содержит только геттеры). Вы можете перенести свою работу с флагомsetReplaceCurrent(true)
и указать новый пакет.
2. Можно ли легко перепланировать задания? Говорят: "Логическое указание, следует ли повторять задание". Как его выбрать, когда нужно перепланировать? Я попробовал образец и выбрал "Повторяющийся", но он, похоже, не запускается снова, только один раз.
- Чтобы перераспределить задание, вам нужно указать
setRecurring(true)
,setTrigger(Trigger.executionWindow(10, 20))
Это активируется, как только крайний срок запуска окна, и водителям предлагается запустить Работу перед окном если возможно.
3. Могут ли они быть защищены от работы с библиотекой (из-за уникальных идентификаторов)?
-
Тэги тегов должны быть уникальными в вашем приложении. Другие приложения на телефоне имеют свои собственные "конечные точки" (имя пакета/имя службы). Чтобы просмотреть все запланированные/готовые задания для
GooglePlayDriver
, используйтеadb shell dumpsys activity service GcmService
4. Требуется ли дополнительная помощь при обновлении приложения (как это делали предыдущие API)? Могут ли задания по-прежнему планироваться после обновления приложения? Тестирование по образцу, похоже, что задания полностью исчезли после обновления приложения. Можно ли этого избежать?
- Что касается GCM Network Manager
GooglePlayDriver
, он не перенаправляет задания после Google Play Services или приложение обновляется. Ниже приведена открытая проблема. Так что пока это ваша ответственность.
5. Нужно ли ему возвращать RECEIVE_BOOT_COMPLETED, если я хочу, чтобы задание еще планировалось, даже когда устройство перезагрузилось? Образец, похоже, имеет его.
- Да, вам нужно такое разрешение.
Builder имеет параметр для управления поведением:
setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT)
Конечно, если вы собираетесь создать свой собственный драйвер, вам придется самому позаботиться о жизни.
6. Можно ли получить список всех запланированных заданий и их информации (включая параметры) и уметь отменять определенные/все из них и даже изменять их?
- Нет, так же, как для GCM Network Manager. Но вы можете отслеживать все задания самостоятельно, пока планируете их играть в сервисы.
7. Будет ли удалено задание при работе с четкими данными приложения?
- Да, работа будет удалена. Вероятно, в предыдущих версиях сервисов google play он вел себя по-другому.
8. Можно ли сказать, что это лучше всего, что он будет работать в течение некоторого времени (например: между 7:00 и 8:00 утра)? Он упоминается "ExecutionWindowTrigger", который указывает временное окно, в котором должно выполняться задание ". Это оно? Что происходит, когда он пропускает это окно?
- Ну, вы можете настроить будильник, который будет запущен в 7:00, и запланировать одноразовое задание с помощью
executionWindow(0, 60*60)
. Работа будет работать с 7:00 до 8:00.
Вы не можете использовать повторяющуюся работу, потому чтоwindowStart - самое раннее время (в секундах) задание должно быть считается пригодным для запуска. Рассчитывается с момента назначения задания (для новых заданий) или последнего запуска (для повторяющихся заданий).
Кроме того, ExecutionWindowTrigger указывает приблизительное время. Он не гарантировал, что он будет работать в данном окне. Если он пропустит окно, задание будет выполняться в любое время позже.
9. Метод "onStartJob" в классе "JobService" возвращает логическое значение, а описание для него - "осталось ли больше работы"., Что это значит? Что означает параметр "needsReschedule" метода "jobFinished"? Связаны ли они друг с другом?
- if
onStartJob
возвращает false, что означает, что вы завершили свою работу. Нет необходимости вызыватьjobFinished
.RESULT_SUCCESS
отправляется автоматически.
if onStartJob
возвращает true, что означает, что вы начали поток и ожидаете результатов. По мере того как вы закончите, вы должны вызвать jobFinished
, чтобы сообщить службам google play о том, должно ли оно быть перенесено или нет. Если да, то задание будет перенесено в зависимости от RetryStrategy
.
10. Существуют ли какие-либо ограничения, о которых я должен знать? Например, минимальные и максимальные значения для каждой из функций?
-
-
onStartJob
должен как можно скорее выгрузить работу в другой поток исполнения. Они предоставляютSimpleJobService
в качестве примера того, что от вас ожидается. - Для Lollipop
JobScheduler
нет реализации драйвера. Также необходимо обработать ситуацию, когда сервисы google play недоступны, мы должны, вероятно, реализоватьDriver
на основеAlarmManager
.
-