Android 12: как предотвратить перезапуск активности при смене обоев телефона?
На Android 12
если мы откроем деятельность
перейдите на главный экран телефона, чтобы сменить обои
Вернитесь к нашей деятельности, деятельность возобновится.
Похоже, это связано с темой Material You.
Я хотел бы отключить перезапуск активности, когда мое приложение выходит на передний план. Есть способ?
1 ответ
Это нетрадиционное изменение конфигурации. Под «нетрадиционным» я подразумеваю, что его нельзя заблокировать
android:configChanges
- ваша деятельность будет уничтожена и воссоздана, нравится вам это или нет.
Если у вас есть объекты до и после изменения, вы можете определить, что этот сценарий произошел, вызвав
diff()
на более новом, чтобы сравнить его со старым:
val diff = resources.configuration.diff(vm.originalConfiguration)
Log.d("WallpaperCCTest", "matches CONFIG_ASSETS_PATHS? ${(diff.toLong() and 0x80000000) != 0L}")
Здесь,
vm.originalConfiguration
указывает на более старый, и мы получаем ток от
Resources
объект.
(diff.toLong() and 0x80000000) != 0L
будет оценивать
true
если смена обоев или что-то подобное привело к изменению конфигурации. Для этого есть и другие крайние случаи - все это «неблокируемое изменение конфигурации» произошло, когда Sony попросила Google добавить поддержку оверлеев ресурсов времени выполнения (RRO) еще в 2017 году. Таким образом, некоторые из этих приложений «изменить системную тему» могут сработать. это же неблокируемое изменение конфигурации.
Как отмечает Нгуен Хой Нам , вы можете обнаружить это по
onConfigurationChanged()
обычай
Application
. Или пусть ваша модель просмотра придерживается предыдущего
Configuration
и сравните его с текущим в
onCreate()
вашей деятельности.
Подробнее об этом читайте в в этом сообщенииблоге . AFAIK, нет способа отказаться от этого изменения конфигурации, поэтому, если ваше приложение было разработано так, чтобы избежать изменений конфигурации, вам может не повезти.