Как выполнить фоновый сервис при активной оптимизации батареи - PullRequest
0 голосов
/ 15 апреля 2019

В настоящее время я использую Firebase JobDipatcher для выполнения периодических задач в фоновом режиме. Проблема заключается в том, что фоновая служба выполняется только в том случае, если оптимизация заряда аккумулятора отключена, а в режиме ожидания приложения вручную установлено значение ACTIVE в параметрах разработчика. Есть ли способ сделать фоновую задачу без изменения всего этого вручную, потому что я не могу попросить каждого пользователя приложения сделать это. И видел много сообщений о том, что Google приостановит работу приложения, если в приложении будут запрошены разрешения на управление питанием. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 22 апреля 2019

Одним словом ответ БОЛЬШОЙ НЕТ

Поскольку разработчики остаются недовольны такими маленькими ответами, поэтому я начинаю теорию HUGE, здесь мы идем-

СТРАТЕГИЯ № - 1:

  1. Использование AlarmManager
  2. Все тревоги забываются андроидом на Reboot, поэтомухраните все аварийные сигналы в базе данных приложения Sqlite, внедрите BOOT_COMPLETED broadcastreceiver, которому все еще разрешено статически определять и планировать все аварийные сигналы, используя данные из базы данных приложений.
  3. Весь ваш проект и тяжелая работа будут работать в соответствии с вашим планом, но только на emulators
  4. Поскольку в реальном мире 99% устройств имеют китайские ПЗУ, такие как MIUI, OxygenOs, ColorOs,FunTouchOs, .. который никогда не запускает ваши приложения BOOT_COMPLETED broadcastreceiver.
  5. Поскольку все они впереди в плане экономии заряда батареи, остановив все фоновые службы приложений .. !!
  6. Хороший вопрос: - Тогда почему процессы whatsapp, facebook, tiktok, twitter выполняютсяобычно...??А почему не мое ... ??
  7. Хороший ответ: - Если китайские ПЗУ не разрешают использовать фоновые сервисы приложений, то никто не будет покупать их устройства .. !!И давайте не будем говорить о вашем приложении, так как оно никак не влияет на мир, ваше приложение useless (согласно китайским ПЗУ), поэтому они запрещают фоновые задачи всех остальных пакетов .. !!
  8. Все китайские ПЗУ никогда не запускают AlarmManager, если приложение не находится в foreground.Никогда не срабатывает, если приложение удалено из recents
  9. Короче говоря, относитесь к Alarmmanager как к обесцененному.

СТРАТЕГИЯ № - 2:

Используйте FirebaseJobScedular, как вы указали

Если пользователь обновляет Google Play Services, то система забывает все задания .. !!

Опять же FirebaseJobScedular был разработан для запуска всех заданий на всех устройствах на рынке, но поскольку китайские ПЗУ никогда не допускают никаких процессов / классов / заданий из своих wishlist, это снова не имеет смысла.

Эта библиотека удалена из Google сейчас.

СТРАТЕГИЯ № - 3:

Используйте WorkManager, новую библиотеку, которая официально размещается над FireBaseJobScedular.

Снова то же самое, WorkManager все еще находится в разработке, вы можете использовать его, но дело в том, что многие китайские ПЗУ также отказываются от заданий этой библиотеки .. !!

СТРАТЕГИЯ № - 4:

Запускать все время приоритетный сервис.

BOOT_COMPLETED из вашего broadcastreceiver запустить его снова.

Но дажеесли вы используете START_STICKY, многие китайские ПЗУ использовали для приостановки его задач, вы можете увидеть это на переднем плане, но работа будет приостановлена.

СТРАТЕГИЯ № - 5:

Использование WakeLocks

Но по мере изменения версии Android она меняется на более новые, более новые стратегии реализации в каждой версии

СТРАТЕГИЯ № - 6:

Программно отключить оптимизацию заряда батареи для вашего приложения, но в этом случае Google отключает ваше приложение из магазина приложений

Перейдите к намерению пользователя настроить параметры оптимизации батареи, открыв его программноИ пусть он сам выбирает оптимизацию батареи, это разрешено google

Но так как ни один пользователь на рынке не знает этого, так как даже многие разработчики этого еще не знают, как конечные пользователиможет понять это .. ??

Опять же, если режим энергосбережения (он отличается от оптимизации батареи в порядке) включен пользователем, то ни в коем случае ваши оптимизации батареи никогда не рассматриваются.

Что мне тогда делать ...?

  1. Ничто как разработчик.
  2. Обучите вашу команду поддержки / продаж «ЗАКРЫТЬ» ваше приложение по дням каждого phone, после чего пользователи не смогут смахнуть его с последних, даже если оно будет смахнуто, все вышеперечисленные стратегии будутработа и ваши рабочие места / тревоги / задачи будут выполнены, как это происходит на вашем эмуляторе Android или как на складе Android
  3. Обучите свою службу поддержки / продаж, как сделать оптимизацию батареи, чтобы "Не оптимизировать для этого приложения" тоже ..

Это так изкоробочное решение .. ??

Да, это так.Как и на рынке, вы заметите, что 1% акций Android-устройств и 99% китайских модифицированных ПЗУ

Все эти знания пришли ко мне после того, как я потерял последние 9–10 лет, решая ту же проблему, Hussshhhh

...