Как защитить фоновые службы / аварийные сигналы, которые будут уничтожены во вновь запущенных устройствах в специализированных ОС, таких как OPPO - ColorOS, Vivo-Funtouch OS, Xiomi-MIUI OS?
У меня есть WakefulBroadcastReceiver
с IntentService
, каждые полчаса звонили и делали что-то. Я уже справился с режимом дозирования с setExactAndAllowWhileIdle()
метод.
Некоторые новые смартфоны с настроенной ОС, недавно выпущенные на рынок, имеют свои собственные ОС, основанные на ОС Android. Как OPPO с цветной ОС, Vivo с ОС Funtouch, Xiomi с ОС MIUI. В ОС есть функция очистки памяти. У них есть опция очистки памяти одним касанием. например, если пользователь очистит недавний список приложений или удалит приложение из недавнего списка приложений, все фоновые службы приложения вместе со всеми аварийными сигналами будут уничтожены.
Как работать с этими новыми ОС?
3 ответа
Для телефонов MIUI необходимо отключить режим энергосбережения, чтобы приложение могло работать в фоновом режиме.
Порядок действий: Зайдите в " Настройки"-> " Аккумулятор"-> " Управление использованием батареи" приложения-> нажмите " Выключить" или выберите приложение
Программно:
Intent intent = new Intent();
intent.setClassName("com.miui.powerkeeper",
"com.miui.powerkeeper.ui.HiddenAppsContainerManagementActivity");
startActivity(intent);
Для устройств Oppo выполните следующие действия:
- Настройки-> Аккумулятор -> Ваше приложение-> Запретить оба варианта.
Программно:
Intent intent = new Intent();
intent.setClassName("com.coloros.oppoguardelf",
"com.coloros.powermanager.fuelgaue.PowerConsumptionActivity");
startActivity(intent);
- Безопасность-> Конфиденциальность-> Менеджер автозагрузки-> Разрешить ваше приложение.
Программно:
Intent intent = new Intent();
intent.setClassName("com.coloros.safecenter",
"com.coloros.safecenter.permission.startup.StartupAppListActivity");
startActivity(intent);
- Заблокируйте приложение на последней вкладке приложения, перетащив его вниз.
Это сработало для меня, надеюсь, это сработает и для вас:)
В тех случаях, когда ваше приложение убито из-за удаления его из списка последних приложений, вы можете переопределить android.app.Service.onTaskRemoved()
запланировать перезапуск приложения или подобное.
Во всех других случаях, когда пользователь явно предпринимает действия, чтобы убить ваше приложение (например, делает "принудительную остановку" из настроек) - пусть будет так. Не пытайтесь обойти это. Пользователь хочет убить ваше приложение. Дайте ему умереть и восстановите функциональность при следующем запуске приложения пользователем.
Попробуйте запустить свой сервис в другом процессе.
<service android:name=".YourBackgroundService"
android:process=":service">