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
<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>
有了这个目标 api 对我来说效果很好
【讨论】:
以上是关于MIUI 11/12 主题切换导致 LifeCycleException、ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章
Maven 错误: Unknown lifecycle phase ".sourceforge.javacsv". You must specify a valid lifecyc