Stream (Best performance):
val largeData: Parcelable = //...
// or
val largeData: Serializable = //...
// send
Intent().apply {
setComponent(ComponentName(APP_PACKAGE_NAME, ACTIVITY_PACKAGE_NAME))
putExtra(LARGE_DATA_STREAM, largeData.parcelableInputStream())
}
// receive
intent.getParcelableExtra<ParcelableInputStream<Parcelable>>(LARGE_DATA_STREAM)?.read()
Slice (Worst performance):
val largeData: Parcelable = //...
// or
val largeData: Serializable = //...
// send
Intent().apply {
setComponent(ComponentName(APP_PACKAGE_NAME, ACTIVITY_PACKAGE_NAME))
putExtra(LARGE_DATA_SLICE, largeData.parcelableSlice())
}
// receive
intent.getParcelableExtra<ParcelableSlice<Parcelable>>(LARGE_DATA_SLICE)?.join()
Pipe (Be careful about process lifecycle):
val largeData: Parcelable = //...
// or
val largeData: Serializable = //...
val (reader, writer) = ParcelableStreamPipe<Parcelable>()
// send
Thread {
writer.write(largeData)
}.start()
Intent().apply {
setComponent(ComponentName(APP_PACKAGE_NAME, ACTIVITY_PACKAGE_NAME))
putExtra(LARGE_DATA_PIPE, reader)
}
// receive
Thread {
intent.getParcelableExtra<ParcelableInputStream<Parcelable>>(LARGE_DATA_PIPE)?.read()
}.start()
Send ParcelFileDescriptor
via intent:
val descriptor: ParcelFileDescriptor = // ...
Intent().apply {
setComponent(ComponentName(APP_PACKAGE_NAME, ACTIVITY_PACKAGE_NAME))
putExtra(PARCELED_DESCRIPTOR, ParceledFileDescriptor(descriptor))
}
intent.getParcelableExtra<ParceledFileDescriptor>(PARCELED_DESCRIPTOR)?.descriptor
Send List<Parcelable>
via intent:
val list: List<Parcelable> = // ...
Intent().apply {
setComponent(ComponentName(APP_PACKAGE_NAME, ACTIVITY_PACKAGE_NAME))
putExtra(PARCELED_LIST, ParceledList(descriptor))
}
intent.getParcelableExtra<ParceledList<Parcelable>>(PARCELED_LIST)?.list
dependencyResolutionManagement {
repositories {
maven("https://jitpack.io")
}
}
dependencies {
implementation("com.github.0xera.parcelable:stream:0.1.1")
implementation("com.github.0xera.parcelable:slice:0.1.1")
}