在 Android 12 上,
如果我们打开一个活动
前往手机主屏幕更换壁纸
切换回我们的活动,活动重新开始。
它似乎与 Material You 主题有关。
当我的应用程序进入前台时,我想禁用重新启动活动。有办法吗?
在 Android 12 上,
如果我们打开一个活动
前往手机主屏幕更换壁纸
切换回我们的活动,活动重新开始。
它似乎与 Material You 主题有关。
当我的应用程序进入前台时,我想禁用重新启动活动。有办法吗?
这是一个非传统的配置更改。通过“非传统”,我的意思是它不能被阻止android:configChanges
——无论你喜欢与否,你的活动都会被破坏并重新创建。
如果您有Configuration
更改前后的对象,您可以通过调用diff()
较新
的对象与较旧的对象Configuration
进行比较来确定发生了这种情况:
val diff = resources.configuration.diff(vm.originalConfiguration)
Log.d("WallpaperCCTest", "matches CONFIG_ASSETS_PATHS? ${(diff.toLong() and 0x80000000) != 0L}")
在这里,vm.originalConfiguration
指向旧的Configuration
,我们Configuration
从Resources
对象中获取电流。(diff.toLong() and 0x80000000) != 0L
将评估true
壁纸更改或类似的东西是否触发了配置更改。还有其他边缘案例——当索尼让谷歌在 2017 年增加对运行时资源覆盖 (RRO) 的支持时,整个“不可阻止的配置更改”就出现了。因此,其中一些“更改系统主题”应用程序可能会触发同样不可阻止的配置更改。
正如Nguyễn Hoài Nam 所说,你可以从onConfigurationChanged()
一个习惯中发现这一点Application
。或者,让您的视图模型保留前一个视图模型Configuration
并将其与onCreate()
您的活动中的当前视图模型进行比较。
我在这篇博文中有更多关于这个问题的信息。AFAIK,没有办法选择退出此配置更改,因此如果您的应用程序旨在避免配置更改,那么您可能会不走运。