Android 9 Pie上的电池保护程序(和夜间模式)重新启动整个活动,如何防止这种情况?

问题描述 投票:1回答:1

当我使用Android 9 Pie在设备(Google Pixel 2)上运行我的应用程序并打开(或关闭)电池保护程序时,整个活动会立即重新启动。当我在较低版本的Android(如6,7和8)上打开省电模式时,应用程序会继续正常运行而不会重新启动。是否有可能在Android 9上阻止这些重新启动?

我调查了一下,发现当你打开电池保护程序时,即使是新的本机夜间模式也会自动打开。因此,我尝试通过“设置 - 开发者选项”仅启用夜间模式,并以与打开省电模式相同的方式重新启动活动。因此,重新启动可能是由夜间模式引起的。

注意:不要混淆“夜灯”,“黑暗主题”和“夜间模式”,这些是不同的东西,问题只有“夜间模式”。

这是来自调试器的堆栈跟踪,可以看出,OS试图通过停止它来重新启动活动(然后再次创建它)。

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有一些变化,但我没有找到任何细节和任何修复可能出现的问题的建议。你能帮我么?

实际结果:我运行我的应用程序并打开/关闭电池保护程序 - >整个主要活动重新启动,因此它被停止然后它尝试以新创建的方式运行。

预期结果:我运行我的应用程序并打开/关闭电池保护程序 - >我的应用程序没有任何反应,它继续它的主要活动,因为什么也没发生。

先感谢您。

android android-9.0-pie battery-saver android-night-mode
1个回答
1
投票

我自己想出来了,所以在这里发布答案(来自https://github.com/flutter/flutter/issues/25626 :))为了解决这个问题,将uiMode放在AndroidManifest的android:configChanges列表中。

           <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值会阻止应用程序因夜间模式重新启动(或者也可以放入扩展坞)。

© www.soinside.com 2019 - 2024. All rights reserved.