Android 12:如何防止更改手机壁纸时重新启动活动?

q12*_*26y 21 android android-12 material-you

在 Android 12 上,

  1. 如果我们开启一个活动

  2. 进入手机主屏幕更换壁纸

  3. 切换回我们的 Activity,该 Activity 重新启动。

看起来它与 Material You 主题有关。

我想在我的应用程序进入前台时禁用活动的重新启动。有办法吗?

Com*_*are 10

这是一个非传统的配置更改。我所说的“非传统”是指它不能被android:configChanges\xe2\x80\x94 阻止,无论您是否喜欢,您的活动都将被销毁并重新创建。

\n

如果您有Configuration更改之前和之后的对象,则可以通过调用diff()较新的\nConfiguration将其与较旧的进行比较来确定是否发生了这种情况:

\n
val diff = resources.configuration.diff(vm.originalConfiguration)\n\nLog.d("WallpaperCCTest", "matches CONFIG_ASSETS_PATHS? ${(diff.toLong() and 0x80000000) != 0L}")\n
Run Code Online (Sandbox Code Playgroud)\n

这里,vm.originalConfiguration指向 old Configuration,我们ConfigurationResources对象中获取当前的。(diff.toLong() and 0x80000000) != 0L将评估true壁纸更改或类似事件是否触发配置更改。\xe2\x80\x94 还有其他边缘情况,当索尼在 2017 年让 Google 添加对运行时资源覆盖 (RRO) 的支持时,整个“不可阻止的配置更改”的事情就发生了。因此,其中一些“改变了系统”主题”应用程序可能会触发相同的不可阻止的配置更改。

\n

正如Nguy\xe1\xbb\x85n Ho\xc3\xa0i Nam 所说,您可以从onConfigurationChanged()自定义Application. 或者,让您的视图模型保留前一个视图模型,并将其与活动中Configuration当前的视图模型进行比较。onCreate()

\n

我在这篇博文中详细介绍了这个问题。AFAIK,没有办法选择退出此配置更改,因此,如果您的应用程序旨在避免配置更改,那么您可能会运气不好。

\n