getActivity/MultiLanguages

[Bug]:如果使用MultiLanguages.setDefaultLanguage设置了语言的情况下,在Android13版本的应用第一次启动会导致多次初始化

a483210 opened this issue · 16 comments

框架版本【必填】

9.0

问题描述【必填】

问题复现和描述

在Android13版本如果设置了MultiLanguages.setDefaultLanguage会导致应用重启,结果表现为ApplicationMainActivity会多次初始化。
具体原因为: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的ApplicationstaticMultiLanguages.setDefaultLanguage注解
  • 2.添加MainActivityonCreate的打印日志Log.i("language", "MainActivity.onCreate " + hashCode());
  • 3.观察控制台,发现日志打印多次并且hashCode不同

是否必现【必填】

项目 targetSdkVersion【必填】

34

出现问题的手机信息【必填】

所有

出现问题的安卓版本【必填】

13

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

Android13版本所有

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

image

小伙子,请先回答这个问题。

问题在android13上是必现的

小伙子,你确定这是回答了上面的问题?

@a483210 小伙子,根据你提供的复现步骤,在 Android 13 的模拟器上面,我无法复现到此问题,你看一下是哪里有问题?

我初略在模拟器上试了下,application没有触发初始化,mainActivity触发了2次

第一个我设置的是中文
第二个我设置的是英文
结果一样,因为都是不跟随系统

CleanShot 2024-02-28 at 13 55 46
CleanShot 2024-02-28 at 13 56 37

小伙子,我又测试了一下,应用启动的时候 Activity 还是只调用一次 onCreate,不知道你说的调用两次 Activity.onCreate 方法怎么来的。

只有应用第一次打开才会有,因为默认是跟随系统,当设置了与系统配置不同的时候才会触发重启。
你看下这个视频,我比较奇怪的是,为什么每次都会触发Harmful app blocked,当然这个其实不影响。

CleanShot.2024-02-29.at.06.12.22.-.01.mp4

小伙子,不知道为啥,我试了若干次,都是只会启动一次 Application 和 Activity,每次我都是卸载重装了。

你看下你初始化的时候有没有走init下面的localeManager.setApplicationLocales(new LocaleList(getAppLanguage(application)));,理论上走了这里不可能不重新初始化的,我这里的确是每次都会复现。

CleanShot 2024-03-04 at 09 43 45

没错的,小伙子,我走的代码就是这里。

长时间没有响应,自动关闭此 issue。