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.
Android Bundles are generally used for passing data from one activity to another. Basically here concept of key-value pair is used where the data that one wants to pass is the value of the map, which can be later retrieved by using the key.
a bundle is a JAR file that: Contains […] resources. Contains a manifest file describing the contents of the JAR file and providing information about the bundle.
Bundles are generally used for passing data between various Android activities. It depends on you what type of values you want to pass, but bundles can hold all types of values and pass them to the new activity.
Bundle is used to pass data between Activities. You can create a bundle, pass it to Intent that starts the activity which then can be used from the destination activity.
I think easiest way for me is:
fun getBundleSizeInBytes(bundle : Bundle) : Int {
val parcel = Parcel.obtain()
parcel.writeValue(bundle)
val bytes = parcel.marshall()
parcel.recycle()
return bytes.size
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With