¿Hay algunos límites en el paquete de Android?

Quiero saber si el tamaño de los datos del paquete de Android tiene un límite superior. Intento publicar datos por paquete que tengan un tamaño> 80k y lanzo la excepción fatal de Android. Los datos son serializables.

Creo que el límite es 500kb. Puede guardar el objeto pasado en un archivo y enviar la ruta del archivo en el paquete en su lugar. Puede verificar una pregunta similar hecha por mí en SO

Depende del propósito del paquete. El paquete en sí solo está limitado por la cantidad de memoria.

Los dos usos principales de los paquetes son pasar información entre los componentes utilizando intenciones y guardar el estado de las actividades.

1. Intents / Ligantes

Cuando se usa para pasar información entre los componentes de Android, el paquete se serializa en una transacción de enlace. El tamaño total para todas las transacciones de enlace en un proceso es de 1 MB. Si excede este límite, recibirá este error fatal “¡¡¡TRANSACCIÓN CON FALLOS DE BINDER !!!”

Se recomienda que mantenga los datos en estos paquetes lo más pequeños posible porque es un búfer compartido, cualquier cantidad superior a unos pocos kilobytes debe escribirse en el disco.

Referencia: https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/jni/android_util_Binder.cpp

ALOGE("!!! FAILED BINDER TRANSACTION !!!"); // TransactionTooLargeException is a checked exception, only throw from certain methods. // FIXME: Transaction too large is the most common reason for FAILED_TRANSACTION // but it is not the only one. The Binder driver can return BR_FAILED_REPLY // for other reasons also, such as if the transaction is malformed or // refers to an FD that has been closed. We should change the driver // to enable us to distinguish these cases in the future. 

Referencia: http://developer.android.com/reference/android/os/TransactionTooLargeException.html

El búfer de transacción de Binder tiene un tamaño fijo limitado, actualmente 1Mb, que comparten todas las transacciones en curso para el proceso. En consecuencia, esta excepción se puede lanzar cuando hay muchas transacciones en progreso, incluso cuando la mayoría de las transacciones individuales son de tamaño moderado.

2. Estado de instancia guardada (actividad enSaveInstanceState, onPause, etc.)

No encontré ningún límite en el tamaño que podía almacenar en el paquete utilizado para preservar el estado de la actividad. Hice algunas pruebas y pude almacenar con éxito aproximadamente 175 MB antes de recibir una excepción de falta de memoria tratando de asignar los datos que estaba intentando guardar.

Sí lo ha hecho, y ahora en el Nougat android se bloqueará si excedió el límite aproximadamente (500Kb).

problema del turrón android

Creo que el tamaño máximo del paquete es 1024 kilobytes. Para transferir objetos grandes entre actividades, debe probar otras formas (memoria caché, almacenamiento local, etc.).

De acuerdo con la API de Google Android , la fecha debe ser inferior a 50 K.

Sí, tiene un límite de 1 MB.

Puede usar la clase Singleton para pasar datos.