Sobes.tech
Middle

O que é a exceção TransactionTooLargeException?

sobes.tech IA

Resposta da IA

A exceção TransactionTooLargeException ocorre quando os dados transmitidos entre componentes da aplicação (por exemplo, de uma Activity para um Service ou entre processos) através do Binder excedem o limite permitido de tamanho.

Binder é um mecanismo de comunicação entre processos (IPC) no Android. Possui um buffer fixo para transferência de dados. O tamanho deste buffer é limitado, geralmente até 1 MB (mais alguma informação de serviço). Quando se tenta transferir dados através do Binder e o tamanho dos dados excede esse limite, o sistema lança TransactionTooLargeException.

Isso geralmente acontece ao:

  • Transferir objetos grandes através de Intent (por exemplo, dados serializados, Bitmap).
  • Trabalhar com serviços AIDL, quando os métodos retornam ou aceitam grandes volumes de dados.
  • Usar Bundle para transferir dados entre componentes.

Formas de resolver o problema:

  • Transferir apenas os dados necessários.
  • Armazenar dados grandes na memória ou no disco e transferir apenas um link para eles (por exemplo, URI, identificador).
  • Usar outros mecanismos de transferência de dados para grandes volumes (por exemplo, sockets locais, provedores de mídia).
  • Dividir dados grandes em partes menores para transferir em várias transações.
// Exemplo que pode levar a uma TransactionTooLargeException
Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
byte[] largeData = new byte[1024 * 1024 * 2]; // 2MB de dados
bundle.putByteArray("data", largeData);
intent.putExtra("bundle", bundle);
startActivity(intent); // Aqui pode ocorrer uma exceção