此捆绑包中的“androidx.lifecycle.BundlableSavedStateRegistry.key”是什么?

Sma*_*mer 5 android kotlin android-bundle onsaveinstancestate androidx

我正在toolargetool调查应用程序崩溃的原因TransactionTooLargeException

androidx.lifecycle.BundlableSavedStateRegistry.key当我将应用程序置于后台时,我看到这个密钥大约有 400 KB。

这个密钥是什么以及它从哪里来?我怎样才能减少包中这个的大小?

Mus*_*tlu 7

就我而言,以下是存储在那里的内容:

  • androidx:应用程序兼容性 = 0.1 KB
  • 安卓:支持:生命周期 = 0.1 KB
  • androidx.lifecycle.internal.SavedStateHandlesProvider = 1.2 KB
  • 机器人:支持:活动结果 = 28.3 KB
  • 机器人:支持:片段= 644.2 KB

我建议您自己调试,因为存储的内容及其大小对于您的项目会有所不同。

调试:

  1. 在函数中放置断点TooLargeTool.bundleBreakdown()。在断点处,您还可以使用类似以下的过滤器:KB(totalSize) > 500这样它只会在大尺寸的 Bundle(例如大于 500 KB 的 Bundle)处停止在断点处。

TooLargeTool 的断点弹出窗口

  1. 一旦到达断点,您就可以在 IDE 中“评估表达式”。

在断点中尝试评估如下代码:

val bundle: Bundle = bundle.getBundle("androidx.lifecycle.BundlableSavedStateRegistry.key")!!
// bundleBreakdown(bundle) // <- this gives you a report including size etc.
val fragmentsBundle = bundle.getBundle("android:support:fragments")!!
bundleBreakdown(fragmentsBundle)
Run Code Online (Sandbox Code Playgroud)

您当然也可以在 IDE 的“调试”窗口中看到捆绑包,但很难看到捆绑包的键和大小。

这样你就可以用 key 准确地找出这个 Bundle 中的空间占用情况androidx.lifecycle.BundlableSavedStateRegistry.key