onConfigurationChanged

onConfigurationChanged

我目前正在试验动态功能模块,遇到了一个奇怪的问题。我通过在Activity中实现onConfigurationChanged方法并通过添加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)

最佳答案

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

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

    super.onConfigurationChanged(configuration);

    ...
}


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

@Override
public Resources.Theme getTheme() {
    Resources.Theme theme = super.getTheme();
    if (themeId != 0) {
        theme.applyStyle(themeId, true);
    }
    return theme;
}

关于android - 动态功能模块中的配置更改后的Resources $ NotFoundException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58727299/

10-09 00:01