Bundle size in bytes

Viewed 5896

Is there any way to know the bundle size in bytes? My point in asking this is I am saving parcelable object lists in my bundle on onSaveInstanceState.

I need to check if the bundle size is reached it's size limit and prevent any more data to get saved, and to prevent TransactionTooLarge exception to occur.

3 Answers

Parcel class has dataSize() member, so the same result can be achieved without calling marshall():

int getBundleSizeInBytes(Bundle bundle) {
    Parcel parcel = Parcel.obtain();
    int size;

    parcel.writeBundle(bundle);
    size = parcel.dataSize();
    parcel.recycle();

    return size;
}

Here's the same method provided by @Volodymyr Kononenko using Kotlin's extension function for those interested:

fun Bundle.bundleSizeInBytes(): Int {
    val parcel = Parcel.obtain()
    parcel.writeBundle(this)

    val size = parcel.dataSize()
    parcel.recycle()

    return size
}

In case you want the Bundle's size in Kilobytes instead of bytes

fun Bundle.bundleSizeInKilobytes(): Double {
    val parcel = Parcel.obtain()
    parcel.writeBundle(this)

    val size = parcel.dataSize().toDouble()/1000
    parcel.recycle()

    return size
}

BTW I wouldn't use writeValue() instead of writeBundle() as writeValue() adds extra 4 bytes to the size.

Related