Правильный способ решения и решения "Чрезмерное использование сети (фон)" - PullRequest
0 голосов
/ 02 февраля 2019

Проблема фон

В настоящее время мы сталкиваемся с " Чрезмерное использование сети (фон) " из отчета Android Vital.Последние 30 дней составляют 0,04% , но мы всего лишь Лучше, чем 9%

  • Последние 30 дней - 0,04%
  • Тест- Лучше, чем 9%

enter image description here

enter image description here

Так как только лучшечем 9% выглядит страшно.Мы решили серьезно заняться этой проблемой.

Приложение представляет собой приложение для создания заметок (https://play.google.com/store/apps/details?id=com.yocto.wenote),, которое предоставляет дополнительную функцию - синхронизацию с облаком в фоновом режиме после закрытия приложения.

Так мы выполняем синхронизацию с облаком в фоновом режиме.

  1. Мы используем WorkManager.
  2. В приложении onPause, Расписание OneTimeWorkRequest, с ограничением NetworkType.CONNECTED.Запуск рабочего запланирован с задержкой 8 секунд.
  3. В случае сбоя мы повторяем попытку, используя BackoffPolicy.LINEAR, с задержкой 1,5 часа.
  4. Максимальное количество повторов - 1 раз.означает, что после закрытия приложения до его повторного открытия Максимальное количество операций синхронизации с облачным процессом составляет 2.
  5. Размер данных может варьироваться от нескольких КБ до нескольких сотен МБ.

Дополнительная информация о том, как мы выполняем синхронизацию

  1. Мы используем Google Drive REST API .
  2. Мы выполняемзагрузка zip-файла из папки «Данные приложения Google Drive», слияние данных в локальном формате,затем заархивируйте и повторно загрузите один zip-файл обратно в папку данных Google Drive App.
  3. Размер zip-файла может варьироваться от нескольких КБ до нескольких сотен МБ.Это потому, что наше приложение для создания заметок поддерживает изображение в виде вложения.

Анализ

Единственная информация, которую мы имеем, это https://developer.android.com/topic/performance/vitals/bg-network-usage.

Когда приложение подключается к мобильной сети в фоновом режиме, оно запускает процессор и включает радио.Это может привести к разрядке аккумулятора устройства.Приложение считается запущенным в фоновом режиме, если оно находится в состоянии PROCESS_STATE_BACKGROUND или PROCESS_STATE_CACHED.... ... ... Android vitals считает использование фоновой сети чрезмерным, когда приложение отправляет и получает суммарно 50 МБ в час при работе в фоновом режиме в 0,10% сеансов работы батареи.

  1. Запускаем задание фоновой синхронизации через 8 секунд после Application onPause.В течение этого периода приложение будет внутри или снаружи PROCESS_STATE_BACKGROUND / PROCESS_STATE_CACHED?Как мы можем избежать работы внутри PROCESS_STATE_BACKGROUND / PROCESS_STATE_CACHED?
  2. Что означает " работа в фоновом режиме в 0,10% сеансов батареи. "?Как мы можем избежать такого?
  3. Другое предположение, файл синхронизации слишком большой и использует слишком много данных.Вскоре мы замечаем, что это предположение может быть неверным.Мы отмечаем, что согласно « Почасовое использование мобильной сети (в фоновом режиме) », размер данных составляет от 0 МБ до 5 МБ.

enter image description here


Вопросы

Мои вопросы

  1. Какова основная причина такого предупреждения " Чрезмерное использование сети (фон) * "?Как мы можем точно определить причину.
  2. Как другие приложения (такие как Google Photo, Google Keep, Google Doc, ...), которые выполняют фоновую синхронизацию, решают эту проблему?

1 Ответ

0 голосов
/ 04 февраля 2019

Для вашего первого вопроса «Чрезмерное использование сети (фон)» запускается, когда:

... приложение отправляет и получает суммарно 50 МБ в час при работе вфон в 0,10% сеансов батареи.Сеанс батареи относится к интервалу между двумя полностью заряженными батареями.

Источник

Чтобы определить причину этого, попробуйте использовать Battery Historyian для анализа использования батареи вашего приложения с течением времени.Для нас это помогло идентифицировать повторяющийся пробуждение, которое мы не собирались вводить.

Вот пример выходных данных, показывающих нам, что чрезмерное сканирование BLE вызывает серьезное воздействие батареи: battery historian screenshot


По вашему второму вопросу, WorkManager, скорее всего, то, что вам нужно, как вы правильно определили.Это позволяет вам планировать задачу, а также окно, в котором вы хотели бы ее видеть. Использование этого позволяет ОС оптимизировать планирование задач для вас, наряду с заданиями других приложений.Например, вместо 6 приложений, которые разбудили устройство каждые 10 минут для выполнения своей почасовой задачи, можно запланировать, что это произойдет для всех 6 приложений одновременно, что увеличит время, проведенное в режиме ожидания.

Примечаниена приведенном выше снимке экрана показана вкладка «JobScheduler Jobs».После выполнения анализа вы сможете увидеть, как на самом деле выполняются ваши задания: job scheduler analysis screenshot

Я ранее использовал Firebase JobDispatcher с большим успехом ( учебное пособие, которое я написал ), которое расширяет API-интерфейс JobScheduler операционной системы и в конечном итоге аналогично.

Я вижу, что вы используете WorkManager (версия JobDispatcher для Jetpack),но за 8 секунд ОС не сможет оптимизировать ваши рабочие места.Можно ли планировать их как минимум за несколько секунд и максимально увеличить максимум?


Дальнейшие улучшения

Однако ваши текущие настройки планирования задач могут не соответствоватькоренная причина.Вот несколько дополнительных идей, которые могут помочь вам улучшить качество батареи.Их полезность станет понятнее после того, как вы запустите Battery Historian и определите основную причину:

  1. Подумайте, является ли доступным только Wi-Fi по умолчанию / опция длясинхронизация данных.Вы почувствуете более эффективное использование батареи, меньше проблем с сетью и, вероятно, более высокую степень удовлетворенности клиентов.

  2. Почему приложение для создания заметок должно синхронизировать несколько сто МБ?Не могли бы вы просто синхронизировать измененную заметку вместо всего списка заметок каждый раз?

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