На этой странице предлагается несколько рекомендаций по настройке корректного выполнения фоновых задач. Эти рекомендации специально направлены на снижение расхода заряда батареи, но они также могут улучшить производительность устройства и другими способами, например сократить использование сети.
Выбирайте оптимальные ограничения и объединяйте задачи
Чтобы минимизировать нагрузку, которую ваши задачи оказывают на устройство, важно указать оптимальные ограничения . (Список ограничений для заданий JobScheduler см. в JobInfo.Builder
.) Возьмем один пример: если вы хотите, чтобы ваше приложение не разряжало батарею, рекомендуется указать ограничение RequiresCharging
. Это ограничение сообщает системе не запускать задание, пока уровень заряда батареи не увеличится. Аналогичным образом, использование Wi-Fi обычно требует меньше энергии, чем мобильная передача данных, поэтому, если вашей задаче требуется сетевое подключение, но можно подождать, пока не станет доступной сеть без ограничений, рекомендуется установить ограничение NetworkType.UNMETERED
.
Кроме того, если у вас есть несколько похожих задач, на которые распространяются одни и те же ограничения, обычно рекомендуется объединить их в одну задачу, чтобы устройство просыпалось только один раз. Например, предположим, что ваше приложение имеет три разных набора данных, которые ему необходимо синхронизировать с облачным хранилищем. Вместо планирования трех разных задач — по одной для каждого набора данных — обычно лучше просто запланировать одну задачу «синхронизировать данные», определить соответствующие ограничения и позволить этой задаче выполнить всю ожидающую синхронизацию данных при ее запуске.
Тем не менее, не следует пытаться объединить несвязанные задачи в одну универсальную задачу. Вместо этого просто убедитесь, что каждая задача имеет соответствующие ограничения. Например, если задачи имеют низкий приоритет, обязательно укажите, что они должны выполняться, когда устройство находится в режиме ожидания и заряжается. Таким образом, даже если устройство несколько раз просыпается, это не повредит пользовательскому опыту и не повлияет на срок службы батареи.
Отмечайте задачи как срочные только в том случае, если они срочны.
Если задача особенно срочная, вы можете пометить ее как ускоренную . (Для заданий JobScheduler вызовите JobInfo.Builder.setExpedited(true)
.) При этом приоритет задачи определяется несколькими способами. Например, система запускает эти задачи немедленно, когда это возможно, а ограничения управления питанием с меньшей вероятностью повлияют на ускоренные задачи.
По этим причинам вам следует быть осторожным и отмечать задачу как ускоренную только тогда, когда это необходимо. Поскольку ускоренные задачи могут перевесить некоторые аспекты эффективности системы, они могут потреблять больше энергии, чем если бы они не были помечены таким образом.
Помечать задачу как ускоренную следует только в том случае, если она срочна, а взаимодействие с пользователем может ухудшиться, если выполнение задачи займет больше времени. Например, если ваше приложение запускает задачу для обработки высокоприоритетного сообщения FCM, это уместная причина пометить задачу как ускоренную. Но не следует помечать задачу как ускоренную только для того, чтобы обойти оптимизацию системы.
Проверьте, почему ваши задачи были остановлены
Если ваши задачи останавливаются до завершения, вы можете проверить, почему они были остановлены, вызвав WorkInfo.getStopReason()
. (Для заданий JobScheduler вызовите JobParameters.getStopReason()
Это важно сделать по нескольким причинам. Прежде всего, конечно, вы хотите, чтобы ваши задачи завершились. Выяснение того, почему ваши задачи остановлены, поможет вам избежать подобных ситуаций. Но также и , система, скорее всего, остановит выполнение задач из-за поведения, приводящего к чрезмерному использованию системных ресурсов. Вы не хотите, чтобы ваше приложение было «плохим гражданином», использующим батарею или сеть без необходимости.
Например, если ваши задачи часто останавливаются по причине STOP_REASON_TIMEOUT
, может возникнуть крайний случай, из-за которого ваши задачи иногда выполняются намного дольше, чем вы ожидаете.
Мы рекомендуем вам использовать систему аналитики, чтобы отслеживать, остановлены ли задачи вашего приложения и по каким причинам.
,На этой странице предлагается несколько рекомендаций по настройке корректного выполнения фоновых задач. Эти рекомендации специально направлены на снижение расхода заряда батареи, но они также могут улучшить производительность устройства и другими способами, например сократить использование сети.
Выбирайте оптимальные ограничения и объединяйте задачи
Чтобы минимизировать нагрузку, которую ваши задачи оказывают на устройство, важно указать оптимальные ограничения . (Список ограничений для заданий JobScheduler см. в JobInfo.Builder
.) Возьмем один пример: если вы хотите, чтобы ваше приложение не разряжало батарею, рекомендуется указать ограничение RequiresCharging
. Это ограничение сообщает системе не запускать задание, пока уровень заряда батареи не увеличится. Аналогичным образом, использование Wi-Fi обычно требует меньше энергии, чем мобильная передача данных, поэтому, если вашей задаче требуется сетевое подключение, но можно подождать, пока не станет доступной сеть без ограничений, рекомендуется установить ограничение NetworkType.UNMETERED
.
Кроме того, если у вас есть несколько похожих задач, на которые распространяются одни и те же ограничения, обычно рекомендуется объединить их в одну задачу, чтобы устройство просыпалось только один раз. Например, предположим, что ваше приложение имеет три разных набора данных, которые ему необходимо синхронизировать с облачным хранилищем. Вместо планирования трех разных задач — по одной для каждого набора данных — обычно лучше просто запланировать одну задачу «синхронизировать данные», определить соответствующие ограничения и позволить этой задаче выполнить всю ожидающую синхронизацию данных при ее запуске.
Тем не менее, не следует пытаться объединить несвязанные задачи в одну универсальную задачу. Вместо этого просто убедитесь, что каждая задача имеет соответствующие ограничения. Например, если задачи имеют низкий приоритет, обязательно укажите, что они должны выполняться, когда устройство находится в режиме ожидания и заряжается. Таким образом, даже если устройство несколько раз просыпается, это не повредит пользовательскому опыту и не повлияет на срок службы батареи.
Отмечайте задачи как срочные только в том случае, если они срочны.
Если задача особенно срочная, вы можете пометить ее как ускоренную . (Для заданий JobScheduler вызовите JobInfo.Builder.setExpedited(true)
.) При этом приоритет задачи определяется несколькими способами. Например, система запускает эти задачи немедленно, когда это возможно, а ограничения управления питанием с меньшей вероятностью повлияют на ускоренные задачи.
По этим причинам вам следует быть осторожным и отмечать задачу как ускоренную только тогда, когда это необходимо. Поскольку ускоренные задачи могут перевесить некоторые аспекты эффективности системы, они могут потреблять больше энергии, чем если бы они не были помечены таким образом.
Помечать задачу как ускоренную следует только в том случае, если она срочна, а взаимодействие с пользователем может ухудшиться, если выполнение задачи займет больше времени. Например, если ваше приложение запускает задачу для обработки высокоприоритетного сообщения FCM, это уместная причина пометить задачу как ускоренную. Но не следует помечать задачу как ускоренную только для того, чтобы обойти оптимизацию системы.
Проверьте, почему ваши задачи были остановлены
Если ваши задачи останавливаются до завершения, вы можете проверить, почему они были остановлены, вызвав WorkInfo.getStopReason()
. (Для заданий JobScheduler вызовите JobParameters.getStopReason()
Это важно сделать по нескольким причинам. Прежде всего, конечно, вы хотите, чтобы ваши задачи завершились. Выяснение того, почему ваши задачи остановлены, поможет вам избежать подобных ситуаций. Но также и , система, скорее всего, остановит выполнение задач из-за поведения, приводящего к чрезмерному использованию системных ресурсов. Вы не хотите, чтобы ваше приложение было «плохим гражданином», использующим батарею или сеть без необходимости.
Например, если ваши задачи часто останавливаются по причине STOP_REASON_TIMEOUT
, может возникнуть крайний случай, из-за которого ваши задачи иногда выполняются намного дольше, чем вы ожидаете.
Мы рекомендуем вам использовать систему аналитики, чтобы отслеживать, остановлены ли задачи вашего приложения и по каким причинам.
,На этой странице предлагается несколько рекомендаций по настройке корректного выполнения фоновых задач. Эти рекомендации специально направлены на снижение расхода заряда батареи, но они также могут улучшить производительность устройства и другими способами, например сократить использование сети.
Выбирайте оптимальные ограничения и объединяйте задачи
Чтобы минимизировать нагрузку, которую ваши задачи оказывают на устройство, важно указать оптимальные ограничения . (Список ограничений для заданий JobScheduler см. в JobInfo.Builder
.) Возьмем один пример: если вы хотите, чтобы ваше приложение не разряжало батарею, рекомендуется указать ограничение RequiresCharging
. Это ограничение сообщает системе не запускать задание, пока уровень заряда батареи не увеличится. Аналогичным образом, использование Wi-Fi обычно требует меньше энергии, чем мобильная передача данных, поэтому, если вашей задаче требуется сетевое подключение, но можно подождать, пока не станет доступной сеть без ограничений, рекомендуется установить ограничение NetworkType.UNMETERED
.
Кроме того, если у вас есть несколько похожих задач, на которые распространяются одни и те же ограничения, обычно рекомендуется объединить их в одну задачу, чтобы устройство просыпалось только один раз. Например, предположим, что ваше приложение имеет три разных набора данных, которые ему необходимо синхронизировать с облачным хранилищем. Вместо планирования трех разных задач — по одной для каждого набора данных — обычно лучше просто запланировать одну задачу «синхронизировать данные», определить соответствующие ограничения и позволить этой задаче выполнить всю ожидающую синхронизацию данных при ее запуске.
Тем не менее, не следует пытаться объединить несвязанные задачи в одну универсальную задачу. Вместо этого просто убедитесь, что каждая задача имеет соответствующие ограничения. Например, если задачи имеют низкий приоритет, обязательно укажите, что они должны выполняться, когда устройство находится в режиме ожидания и заряжается. Таким образом, даже если устройство несколько раз просыпается, это не повредит пользовательскому опыту и не повлияет на срок службы батареи.
Отмечайте задачи как срочные только в том случае, если они срочны.
Если задача особенно срочная, вы можете пометить ее как ускоренную . (Для заданий JobScheduler вызовите JobInfo.Builder.setExpedited(true)
.) При этом приоритет задачи определяется несколькими способами. Например, система запускает эти задачи немедленно, когда это возможно, а ограничения управления питанием с меньшей вероятностью повлияют на ускоренные задачи.
По этим причинам вам следует быть осторожным и отмечать задачу как ускоренную только тогда, когда это необходимо. Поскольку ускоренные задачи могут перевесить некоторые аспекты эффективности системы, они могут потреблять больше энергии, чем если бы они не были помечены таким образом.
Помечать задачу как ускоренную следует только в том случае, если она срочна, а взаимодействие с пользователем может ухудшиться, если выполнение задачи займет больше времени. Например, если ваше приложение запускает задачу для обработки высокоприоритетного сообщения FCM, это уместная причина пометить задачу как ускоренную. Но не следует помечать задачу как ускоренную только для того, чтобы обойти оптимизацию системы.
Проверьте, почему ваши задачи были остановлены
Если ваши задачи останавливаются до завершения, вы можете проверить, почему они были остановлены, вызвав WorkInfo.getStopReason()
. (Для заданий JobScheduler вызовите JobParameters.getStopReason()
Это важно сделать по нескольким причинам. Прежде всего, конечно, вы хотите, чтобы ваши задачи завершились. Выяснение того, почему ваши задачи остановлены, поможет вам избежать подобных ситуаций. Но также и , система, скорее всего, остановит выполнение задач из-за поведения, приводящего к чрезмерному использованию системных ресурсов. Вы не хотите, чтобы ваше приложение было «плохим гражданином», использующим батарею или сеть без необходимости.
Например, если ваши задачи часто останавливаются по причине STOP_REASON_TIMEOUT
, может возникнуть крайний случай, из-за которого ваши задачи иногда выполняются намного дольше, чем вы ожидаете.
Мы рекомендуем вам использовать систему аналитики, чтобы отслеживать, остановлены ли задачи вашего приложения и по каким причинам.
,На этой странице предлагается несколько рекомендаций по настройке корректного выполнения фоновых задач. Эти рекомендации специально направлены на снижение расхода заряда батареи, но они также могут улучшить производительность устройства и другими способами, например сократить использование сети.
Выбирайте оптимальные ограничения и объединяйте задачи
Чтобы минимизировать нагрузку, которую ваши задачи оказывают на устройство, важно указать оптимальные ограничения . (Список ограничений для заданий JobScheduler см. в JobInfo.Builder
.) Возьмем один пример: если вы хотите, чтобы ваше приложение не разряжало батарею, рекомендуется указать ограничение RequiresCharging
. Это ограничение сообщает системе не запускать задание, пока уровень заряда батареи не увеличится. Аналогичным образом, использование Wi-Fi обычно требует меньше энергии, чем мобильная передача данных, поэтому, если вашей задаче требуется сетевое подключение, но можно подождать, пока не станет доступной сеть без ограничений, рекомендуется установить ограничение NetworkType.UNMETERED
.
Кроме того, если у вас есть несколько похожих задач, на которые распространяются одни и те же ограничения, обычно рекомендуется объединить их в одну задачу, чтобы устройство просыпалось только один раз. Например, предположим, что ваше приложение имеет три разных набора данных, которые ему необходимо синхронизировать с облачным хранилищем. Вместо планирования трех разных задач — по одной для каждого набора данных — обычно лучше просто запланировать одну задачу «синхронизировать данные», определить соответствующие ограничения и позволить этой задаче выполнить всю ожидающую синхронизацию данных при ее запуске.
Тем не менее, не следует пытаться объединить несвязанные задачи в одну универсальную задачу. Вместо этого просто убедитесь, что каждая задача имеет соответствующие ограничения. Например, если задачи имеют низкий приоритет, обязательно укажите, что они должны выполняться, когда устройство находится в режиме ожидания и заряжается. Таким образом, даже если устройство несколько раз просыпается, это не повредит пользовательскому опыту и не повлияет на срок службы батареи.
Отмечайте задачи как срочные только в том случае, если они срочны.
Если задача особенно срочная, вы можете пометить ее как ускоренную . (Для заданий JobScheduler вызовите JobInfo.Builder.setExpedited(true)
.) При этом приоритет задачи определяется несколькими способами. Например, система запускает эти задачи немедленно, когда это возможно, а ограничения управления питанием с меньшей вероятностью повлияют на ускоренные задачи.
По этим причинам вам следует быть осторожным и отмечать задачу как ускоренную только тогда, когда это необходимо. Поскольку ускоренные задачи могут перевесить некоторые аспекты эффективности системы, они могут потреблять больше энергии, чем если бы они не были помечены таким образом.
Помечать задачу как ускоренную следует только в том случае, если она срочна, а взаимодействие с пользователем может ухудшиться, если выполнение задачи займет больше времени. Например, если ваше приложение запускает задачу для обработки высокоприоритетного сообщения FCM, это уместная причина пометить задачу как ускоренную. Но не следует помечать задачу как ускоренную только для того, чтобы обойти оптимизацию системы.
Проверьте, почему ваши задачи были остановлены
Если ваши задачи останавливаются до завершения, вы можете проверить, почему они были остановлены, вызвав WorkInfo.getStopReason()
. (Для заданий JobScheduler вызовите JobParameters.getStopReason()
Это важно сделать по нескольким причинам. Прежде всего, конечно, вы хотите, чтобы ваши задачи завершились. Выяснение того, почему ваши задачи остановлены, поможет вам избежать подобных ситуаций. Но также и , система, скорее всего, остановит выполнение задач из-за поведения, приводящего к чрезмерному использованию системных ресурсов. Вы не хотите, чтобы ваше приложение было «плохим гражданином», использующим батарею или сеть без необходимости.
Например, если ваши задачи часто останавливаются по причине STOP_REASON_TIMEOUT
, может возникнуть крайний случай, из-за которого ваши задачи иногда выполняются намного дольше, чем вы ожидаете.
Мы рекомендуем вам использовать систему аналитики, чтобы отслеживать, остановлены ли задачи вашего приложения и по каким причинам.