MIUI 11/12 主题切换导致 LifeCycleException、ClassCastException

Posted

技术标签:

【中文标题】MIUI 11/12 主题切换导致 LifeCycleException、ClassCastException【英文标题】:MIUI 11/12 Theme Switch Results in LifeCycleException, ClassCastException 【发布时间】:2021-02-10 08:45:03 【问题描述】:

自从 MIUI 11/12 使用它自己的暗模式自定义实现,使用下面的代码会导致 ClassCastException 和 Activity 生命周期异常,因为 DefaultNightMode 和 LocalNightMode 始终未指定,即 -100 而不是 0 或 1。

如果有人专门为 MIUI 11/12 构建了针对小米设备的解决方法。请帮帮我。

使用的代码:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
this.recreate();

错误原因:

2020-10-25 07:04:43.626 9167-9167/com.xxxx.xxxxxx E/ActivityInjector: get life cycle exception
    java.lang.ClassCastException: android.os.BinderProxy cannot be cast to android.app.servertransaction.ClientTransaction

【问题讨论】:

你看过这个吗? developer.android.com/guide/topics/ui/look-and-feel/darktheme 它说重新创建活动是不必要的。根据 MIUI 下的 Android 版本,这可能是问题所在。 感谢您的回复。我已经看过了,问题不在于Android,它是最重要的MIUI皮肤。该应用程序在 Stock Android(相同的 api)上运行良好。 我认为异常来自函数Activity.recreate(),在小米设备上似乎给出了这个错误。 【参考方案1】:

我自己解决了。折腾了一个星期后,我做到了..

方法如下:

-- 而不是为每个 Activity 设置 android:forceDarkAllowed="false"。

-- 只需转到 values.xml 并将其放在您的 AppTheme 中

        <item name="android:forceDarkAllowed">false</item>

它会要求你创建一个 valuesv29.xml。创建它,然后从所有活动中删除 forceDarkAllowed="false"。

欢迎。 :)

【讨论】:

您是否删除了重新创建功能? 不@ElNuru,我没有问题是我们正在更改每个活动的主题而不是整个应用程序。按照上述步骤解决了这个问题。【参考方案2】:

同样在 jetpack compose 中,只需将行添加到 theme.xml

&lt;item name="android:forceDarkAllowed" tools:targetApi="q"&gt;false&lt;/item&gt;

有了这个目标 api 对我来说效果很好

【讨论】:

以上是关于MIUI 11/12 主题切换导致 LifeCycleException、ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章

杂文 - 设计MIUI主题 的 MIUI设计师

MIUI 状态栏主题的问题

小米安卓10有啥功能

手机UI到底是啥 它和手机主题一样吗

Flutter导入ios第三方Framework

Maven 错误: Unknown lifecycle phase ".sourceforge.javacsv". You must specify a valid lifecyc