4

我目前正在试验动态功能模块,遇到了一个奇怪的问题。onConfigurationChanged我通过在我的 Activity 中实现该方法并通过在清单中添加来定义它来处理配置更改android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|uiMode"。这适用于“普通”apk,但是 - 当我在动态功能模块中执行此操作时,我会Resources$NotFoundException在设备旋转后得到一个 - 对于在旋转之前已经正确解析的资源。因此,从我的角度来看,我缺少一些可以正确处理旋转的东西 - 我已经尝试在 中重新应用SplitCompat.install(<Context>)onConfigurationChanged但这也不起作用。有人知道我在做什么错吗?

这发生在我的 com.google.android.play:core:1.6.4 库中。

2019-11-06 10:33:33.101 5933-5933/? W/ResourceType: No known package when getting value for resource number 0x7e0d00a8
2019-11-06 10:33:33.102 5933-5933/? D/AndroidRuntime: Shutting down VM
2019-11-06 10:33:33.103 5933-5933/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.jumio.dynamicfeature, PID: 5933
android.content.res.Resources$NotFoundException: String resource ID #0x7e0d00a8
        at android.content.res.Resources.getText(Resources.java:339)
        at android.widget.TextView.setText(TextView.java:5496)
4

1 回答 1

4

终于找到了导致问题的问题 - 似乎SplitCompat.install(<Context>)需要调用onConfigurationChanged- 但在super.onConfigurationChanged()调用之前!必须这样做,因为super.onConfigurationChanged触发了onConfigurationChanged我更新 ui 某些部分的片段内的方法。

@Override
public void onConfigurationChanged(Configuration configuration) {
    SplitCompat.install(this);

    super.onConfigurationChanged(configuration);

    ...
}

之后我还遇到了一个问题,主题属性在旋转后无法解析 - 事实证明,如果使用片段,getTheme则活动中的方法也需要调整 - themeId 与 onCreate 中的 setTheme 设置的 id 相同方法。

@Override
public Resources.Theme getTheme() {
    Resources.Theme theme = super.getTheme();
    if (themeId != 0) {
        theme.applyStyle(themeId, true);
    }
    return theme;
}
于 2019-12-12T09:02:34.200 回答