Sobes.tech
Middle

Qu'est-ce que l'exception TransactionTooLargeException ?

sobes.tech IA

Réponse de l'IA

L'exception TransactionTooLargeException se produit lorsque les données transmises entre les composants de l'application (par exemple, d'une Activity à un Service ou entre processus) via Binder dépassent la limite autorisée en taille.

Binder est un mécanisme de communication inter-processus (IPC) dans Android. Il dispose d'un tampon fixe pour le transfert de données. La taille de ce tampon est limitée, généralement jusqu'à 1 Mo (plus quelques informations de service). Lorsqu'on tente de transférer des données via Binder et que la taille dépasse cette limite, le système lance TransactionTooLargeException.

Cela se produit généralement lors de:

  • Transfert d'objets volumineux via Intent (par exemple, données sérialisées, Bitmap).
  • Travail avec des services AIDL, lorsque les méthodes retournent ou acceptent de grands volumes de données.
  • Utilisation de Bundle pour transférer des données entre composants.

Solutions possibles:

  • Transférer uniquement les données nécessaires.
  • Stocker les données volumineuses en mémoire ou sur disque et ne transférer qu'un lien vers elles (par exemple, URI, identifiant).
  • Utiliser d'autres mécanismes de transfert de données pour de grands volumes (par exemple, sockets locaux, fournisseur de médias).
  • Diviser les grandes données en parties plus petites pour les transférer en plusieurs transactions.
// Exemple pouvant entraîner une TransactionTooLargeException
Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
byte[] largeData = new byte[1024 * 1024 * 2]; // 2MB de données
bundle.putByteArray("data", largeData);
intent.putExtra("bundle", bundle);
startActivity(intent); // Une exception peut être levée ici