#android #android-9.0-pie #battery-saver #android-night-mode
#Android #android-9.0-pie #экономия заряда батареи #android-ночной режим
Вопрос:
Когда я запускаю свое приложение на устройстве (Google Pixel 2) с Android 9 Pie и включаю (или выключаю) функцию экономии заряда батареи, вся активность немедленно перезапускается. Когда я включаю экономию заряда батареи на более низких версиях Android, таких как 6, 7 и 8, приложение продолжает работу в обычном режиме без перезапуска. Возможно ли предотвратить эти перезапуски и на Android 9?
Я исследовал это и обнаружил, что при включении экономии заряда батареи автоматически включается даже новый собственный ночной режим. Итак, я попытался включить только ночной режим через «Настройки — Параметры разработчика», и он перезапустил активность таким же образом, как включение экономии заряда батареи. Таким образом, этот перезапуск может быть вызван ночным режимом.
Примечание: не путайте «Ночник», «Темную тему» и «Ночной режим», это разные вещи, и проблема только в «Ночном режиме».
Это stacktrace из debugger, где видно, что ОС пытается возобновить активность, остановив ее (а затем создает ее снова).
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 -> перезапускается вся основная активность, поэтому она останавливается, а затем пытается запуститься как вновь созданная.
Ожидаемый результат: я запускаю свое приложение и включаю / выключаю 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 предотвращает перезапуск приложения из-за ночного режима (или установки док-станции тоже).