Android用户切换系统语言后,回到App,App重新加载导致的一些问题
可能导致的问题
App重启,Activity重新创建,业务逻辑重新执行,可能导致:
- 某页面,如上层的半透明页面因UI自动重建,存在1个,而后业务重新逻辑执行又创建了1个,此时存在2个相同页面;
- 如果在切换系统语言之前,App页面中存在一个等待交互的Dialog,则切换后回到app,将导致Dialog所attach的Activity重建,导致Dialog崩溃、闪退(此情况可以在Activity的onDestroy中销毁Dialog来解决)
- 因重建、重新执行业务逻辑可能导致的其它奇奇怪怪的问题。
解决方法
设置android:configChanges="layoutDirection"
即可。
虽然Android官方文档(https://developer.android.com/guide/topics/manifest/activity-element#config)说明:
“layoutDirection” 布局方向发生变更 - 例如,自从左至右 (LTR) 更改为从右至左 (RTL)。 在 API 级别 17 中引入。
“locale” 语言区域发生变更 - 用户已为文本选择新的显示语言。
但是,很奇怪的是,设置locale
并不起作用(测试环境targetSdkVersion 29
,设备小米12 Android 11 or 模拟器api31
)。
设置"layoutDirection"
是有效的,Activity不会再被重建,而是回调到 onConfigurationChanged(Configuration newConfig)
,此时App内可酌情处理相关逻辑。