[Bug]:如果使用MultiLanguages.setDefaultLanguage设置了语言的情况下,在Android13版本的应用第一次启动会导致多次初始化
a483210 opened this issue · 16 comments
a483210 commented
框架版本【必填】
9.0
问题描述【必填】
问题复现和描述
在Android13版本如果设置了MultiLanguages.setDefaultLanguage
会导致应用重启,结果表现为Application
和MainActivity
会多次初始化。
具体原因为:MultiLanguages
下的init
方法在TIRAMISU
版本非系统语言的情况下会设置重新setApplicationLocales
,导致应用被重启
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
LocaleManager localeManager = application.getSystemService(LocaleManager.class);
if (localeManager != null) {
if (isSystemLanguage(application)) {
localeManager.setApplicationLocales(LocaleList.getEmptyLocaleList());
} else {
localeManager.setApplicationLocales(new LocaleList(getAppLanguage(application)));
}
}
}
疑问
因为这个Api是必定会导致应用重启。
我的问题如下:
- 1.这里设置
setApplicationLocales
的原因是什么,是在解决什么问题。 - 2.这个Api可不可以去除,有没有其他Api可以替代。
复现步骤【必填】
- 1.打开Demo的
Application
的static
的MultiLanguages.setDefaultLanguage
注解 - 2.添加
MainActivity
的onCreate
的打印日志Log.i("language", "MainActivity.onCreate " + hashCode());
- 3.观察控制台,发现日志打印多次并且hashCode不同
是否必现【必填】
是
项目 targetSdkVersion【必填】
34
出现问题的手机信息【必填】
所有
出现问题的安卓版本【必填】
13
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
Android13版本所有
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
No response
提供截图或视频
No response
提供解决方案
No response
getActivity commented
a483210 commented
问题在android13上是必现的
getActivity commented
小伙子,你确定这是回答了上面的问题?
a483210 commented
getActivity commented
getActivity commented
@a483210 小伙子,根据你提供的复现步骤,在 Android 13 的模拟器上面,我无法复现到此问题,你看一下是哪里有问题?
a483210 commented
getActivity commented
getActivity commented
小伙子,我又测试了一下,应用启动的时候 Activity 还是只调用一次 onCreate
,不知道你说的调用两次 Activity.onCreate
方法怎么来的。
a483210 commented
只有应用第一次打开才会有,因为默认是跟随系统,当设置了与系统配置不同的时候才会触发重启。
你看下这个视频,我比较奇怪的是,为什么每次都会触发Harmful app blocked
,当然这个其实不影响。
CleanShot.2024-02-29.at.06.12.22.-.01.mp4
getActivity commented
小伙子,不知道为啥,我试了若干次,都是只会启动一次 Application 和 Activity,每次我都是卸载重装了。
getActivity commented
a483210 commented
getActivity commented
getActivity commented
没错的,小伙子,我走的代码就是这里。
getActivity commented
长时间没有响应,自动关闭此 issue。