如何在onSaveInstanceState中检查Bundle对象的大小?

时间:2017-12-04 12:06:46

标签: android android-studio android-bundle onsaveinstancestate

我正在使用Android Studio 3.0.1,它允许检查Bundle中的onSaveInstanceState对象:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

为此,添加一个断点,一旦调试器停止,请右键单击Bundle对象,如屏幕截图所示,然后选择" Show Bundle Objects ..."从上下文菜单中。

Android Studio - Show Bundle Objects

然后会打开一个窗口列出Bundle个对象,如此屏幕截图所示:

Android Studio - Bundle objects

有没有办法找出整个Bundle及其所有孩子占据的多少内存?我想识别要优化的更大块,并避免在Android> = 7上抛出TransactionTooLargeException

像Ubuntu 磁盘使用分析器之类的东西会有所帮助 - 请参阅screeshot:

Disk Usage Analyzer

2 个答案:

答案 0 :(得分:4)

你也可以使用这个: -

=>只需通过这里的Bundle

public int  getBundleSizeInBytes(Bundle bundle  ) {
            Parcel parcel = Parcel.obtain();
            parcel.writeValue(bundle);
            byte[] bytes = parcel.marshall();
            parcel.recycle();
            return bytes.length;
}

然后使用android.text.format.Formatter.formatFileSize(activityContext, bytes)输出得很好。

答案 1 :(得分:1)

TooLargeTool非常适合在诊断TransactionTooLargeException时分析捆绑包的大小。