在Android 12上
它似乎是与你主题的材料有关。
当我的应用程序到达前台时,我想禁用活动的重新启动。有办法吗?
发布于 2021-10-31 18:39:06
这是一个非传统的配置变化。所谓“非传统”,我的意思是它不能被android:configChanges阻止--不管你喜欢与否,你的活动都会被破坏和重新创造。
如果更改前后都有Configuration对象,则可以通过在较新的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,我们从Resources对象获得当前的Configuration。如果墙纸更改或类似的内容触发配置更改,(diff.toLong() and 0x80000000) != 0L将评估为true。这方面还有其他的优势--这个“不可阻挡的配置变化”是在2017年索尼让谷歌加入运行时资源覆盖(RRO)支持时出现的。因此,其中一些“更改系统主题”应用程序可能会触发同样不可阻挡的配置更改。
作为Nguyễn Hoài Nam注意到,您可以从自定义Application的onConfigurationChanged()中检测到这一点。或者,让您的视图模型保持先前的Configuration,并将其与您活动的onCreate()中的当前模型进行比较。
我在这篇博客文章中有更多关于这个问题的报道。AFAIK,没有办法选择退出这个配置变化,所以如果您的应用程序是为了避免配置更改,您可能是运气不好。
https://stackoverflow.com/questions/69741827
复制相似问题