バンドルサイズをバイト単位で知る方法はありますか?これを尋ねる私のポイントは、パーセル可能なオブジェクトリストをbundle
のonSaveInstanceState
に保存しているということです。
バンドルサイズがサイズ制限に達しているかどうかを確認し、それ以上データが保存されないようにし、TransactionTooLarge
例外が発生しないようにする必要があります。
私にとって最も簡単な方法は次のとおりです。
fun getBundleSizeInBytes(bundle : Bundle) : Int {
val parcel = Parcel.obtain()
parcel.writeValue(bundle)
val bytes = parcel.marshall()
parcel.recycle()
return bytes.size
}
パーセルクラスにはdataSize()メンバーがあるため、marshall()を呼び出さなくても同じ結果を得ることができます。
int getBundleSizeInBytes(Bundle bundle) {
Parcel parcel = Parcel.obtain();
int size;
parcel.writeBundle(bundle);
size = parcel.dataSize();
parcel.recycle();
return size;
}