android - Android 9 Pie 上的省电模式(和夜间模式)会重新启动整个 Activity ,如何防止这种情况发生?

标签 android android-9.0-pie battery-saver android-night-mode

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

我调查后发现,当您打开省电模式时,甚至会自动打开新的原生夜间模式。因此,我尝试通过“设置 - 开发人员选项”仅打开夜间模式,并以与打开省电模式相同的方式重新启动 Activity 。所以这次重新启动可能是由夜间模式引起的。

注意:不要混淆“夜灯”、“深色主题”和“夜间模式”,它们是不同的东西,问题仅在于“夜间模式”。

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

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 上,省电模式有一些变化,但我没有找到任何细节和解决可能问题的建议。 你能帮帮我吗?

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

预期结果:我运行我的应用并打开/关闭省电模式 -> 我的应用没有任何反应,它继续执行主要 Activity ,因为没有任何反应。

提前谢谢你。

最佳答案

我自己弄明白了,所以在这里发布答案(来自 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 值阻止应用程序因夜间模式(或也放入扩展坞)而重新启动。

关于android - Android 9 Pie 上的省电模式(和夜间模式)会重新启动整个 Activity ,如何防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55397866/

相关文章:

react-native - 新手机中的 React Native 应用程序 "full screen"

android-9.0-pie - env(safe-area-inset-top) 不适用于 Android Pie + WebView 69

java - Android 蓝牙 LE 禁用通知回调耗尽电池?

android - 我需要等到监听器将 bool 值从 null 更改为 false/true java

java - 将裁剪后的背景图像设置为自定义 ListView 项目

android - 来自通知的 showInputMethodPicker 在 Android 9 中不起作用

android - ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS : Need Intent to All Apps List

给笔记本电池充放电的Python脚本

android - Android 中的一些下载问题

android - 以编程方式更改的可见性与权重不匹配