Экономия заряда батареи (и ночной режим) на Android 9 Pie возобновляет всю активность, как предотвратить это?

Когда я запускаю свое приложение на устройстве (Google Pixel 2) с Android 9 Pie и включаю (или выключаю) аккумуляторную батарею, вся деятельность немедленно возобновляется. Когда я включаю функцию экономии заряда батареи на более низких версиях Android, таких как 6, 7 и 8, приложение продолжает работать без перезапуска. Можно ли предотвратить эти перезапуски на Android 9 тоже?

Я исследовал его и обнаружил, что при включении функции экономии заряда аккумулятора даже новый ночной режим автоматически включается. Поэтому я попытался включить только "Ночной режим" через "Настройки - Параметры разработчика", и он возобновил работу так же, как и включение Battery Saver. Так что этот перезапуск может быть вызван ночным режимом.

Примечание: не путайте "Ночной свет", "Темная тема" и "Ночной режим", это разные вещи, и проблема только в "Ночном режиме".

Это трассировка стека от отладчика, где видно, что ОС пытается перезапустить активность, останавливая ее (а затем снова создает).

onStop:579, MyActivity (com.mypackage)
callActivityOnStop:1432, Instrumentation (android.app)
performStop:7375, Activity (android.app)
callActivityOnStop:4181, ActivityThread (android.app)
handleRelaunchActivityInner:4796, ActivityThread (android.app)
handleRelaunchActivity:4732, ActivityThread (android.app)
execute:69, ActivityRelaunchItem (android.app.servertransaction)
executeCallbacks:108, TransactionExecutor (android.app.servertransaction)
execute:68, TransactionExecutor (android.app.servertransaction)
handleMessage:1816, ActivityThread$H (android.app)
dispatchMessage:106, Handler (android.os)
loop:193, Looper (android.os)
main:6718, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:493, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:858, ZygoteInit (com.android.internal.os)

Я прочитал здесь https://developer.android.com/about/versions/pie/power, что на новом Android есть некоторые изменения в Battery Saver, но я не нашел никаких деталей и каких-либо советов по устранению возможных проблем. Не могли бы вы мне помочь?

Фактический результат: я запускаю свое приложение и включаю / выключаю функцию экономии заряда батареи -> вся основная деятельность перезапускается, поэтому она останавливается, а затем пытается запустить ее как вновь созданную.

Ожидаемый результат: я запускаю свое приложение и включаю / выключаю функцию экономии заряда батареи -> с моим приложением ничего не происходит, оно продолжает свою основную деятельность, так как ничего не происходит.

Заранее спасибо.

1 ответ

Решение

Я сам разобрался, поэтому выкладываю ответ здесь (он с https://github.com/flutter/flutter/issues/25626:)) Чтобы исправить эту проблему, поместите uiMode в список android:configChanges в вашем AndroidManifest,

           <activity android:name=".MainActivity"
                  android:launchMode="singleTop"
                  android:theme="@android:style/Theme.Black.NoTitleBar"
                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|uiMode"
                  android:hardwareAccelerated="true"
                  android:windowSoftInputMode="adjustResize">

Это связано с тем, что значение uiMode предотвращает перезапуск приложения из-за ночного режима (или установки в док-станцию ​​тоже).

Другие вопросы по тегам