Android垃圾邮件中旋转屏幕保存的实例状态和ActivityResultRegistry

Ale*_*kin 5 java android kotlin

每次屏幕旋转时,我的应用程序都会在 onSaveInstanceState() 活动中保存更大的包,并且我遇到了一些非常令人困惑的事情。这是一个最小的例子:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)

        val rcs = outState.getIntegerArrayList("KEY_COMPONENT_ACTIVITY_REGISTERED_RCS")
        val keys = outState.getStringArrayList("KEY_COMPONENT_ACTIVITY_REGISTERED_KEYS")

        Log.d("MainActivity", "${rcs?.size}: $rcs, $keys")
    }
}
Run Code Online (Sandbox Code Playgroud)

每次旋转屏幕时我都会得到以下输出:

3: [1332505437, 1835553837, 670316111], [FragmentManager:StartIntentSenderForResult, ...
6: [1332505437, 91080073, 1835553837, 381123153, 1187376284, 670316111], ...
...
Run Code Online (Sandbox Code Playgroud)

查看 6 次旋转后的完整日志:https://pastebin.com/yfE04Fmc

每次旋转屏幕时,都会向这两个条目添加 3 个元素。旋转屏幕一段时间后,实例状态无明显原因明显变大。

目标API:30

测试依据:API 28 和 30

有谁知道为什么会发生这种情况?

更新:我想澄清一下,我不会将任何状态保存到捆绑包中。我显示的值是由 Android 本身创建的:在 ActivityResultRegistry 中。我为此示例创建了一个空项目,并且我提供的代码是我拥有的唯一代码 - 没有其他代码与状态包交互。

更新 2:已提交错误报告:https ://issuetracker.google.com/issues/191893160

更新 3Activity 1.3.0-rc02 :错误已修复,将成为并1.2.4发布的一部分

Den*_*ean 0

首先,为什么你不使用 ViewModel 呢?