Middle
Co je výjimka TransactionTooLargeException?
sobes.tech AI
Odpověď od AI
Výjimka TransactionTooLargeException nastává, když data přenášená mezi komponentami aplikace (například z Activity do Service nebo mezi procesy) přes Binder překročí povolený limit velikosti.
Binder je mechanismus meziprocesové komunikace (IPC) v Androidu. Má pevný buffer pro přenos dat. Velikost tohoto bufferu je omezená, obvykle do 1 MB (plus nějaké servisní informace). Když se pokusíte přenést data přes Binder a jejich velikost překročí tento limit, systém vyvolá TransactionTooLargeException.
Obvykle se to stává při:
- Přenosu velkých objektů přes
Intent(například serializovaná data, Bitmapy). - Práci se službami AIDL, když metody vracejí nebo přijímají velké objemy dat.
- Použití
Bundlepro přenos dat mezi komponentami.
Možnosti řešení:
- Přenášet pouze nezbytná data.
- Velká data ukládat do paměti nebo na disk a přenášet pouze odkaz na ně (například URI, identifikátor).
- Používat jiné mechanismy přenosu dat pro velké objemy (například lokální sockety, mediální poskytovatelé).
- Rozdělit velká data na menší části pro přenos v několika transakcích.
// Příklad, který může vést k TransactionTooLargeException
Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
byte[] largeData = new byte[1024 * 1024 * 2]; // 2MB dat
bundle.putByteArray("data", largeData);
intent.putExtra("bundle", bundle);
startActivity(intent); // Zde může být vyvolána výjimka