Middle
Mi az a TransactionTooLargeException kivétel?
sobes.tech MI
Válasz az MI-től
A TransactionTooLargeException kivétel akkor fordul elő, amikor az alkalmazás komponensei között (például Activity-ből Service-be vagy folyamatok között) a Binder-en keresztül továbbított adatok mérete meghaladja a megengedett határt.
A Binder egy folyamatok közötti kommunikációs (IPC) mechanizmus Androidon. Fix puffert használ az adatok átviteléhez. Ennek a puffernek a mérete korlátozott, általában 1 MB-ig (plusz néhány szolgáltatási információ). Amikor adatokat próbálsz átvinni Binder-en keresztül, és az adatok mérete meghaladja ezt a határt, a rendszer TransactionTooLargeException-t dob.
Ez általában akkor fordul elő, amikor:
- Nagy objektumokat továbbítasz
Intent-tel (például szériázott adatok, Bitmapek). - AIDL-szolgáltatásokkal dolgozol, amikor a metódusok nagy mennyiségű adatot adnak vissza vagy fogadnak.
Bundle-t használsz adatok átadására a komponensek között.
A probléma megoldásának módjai:
- Csak a szükséges adatokat továbbítani.
- Nagy adatokat memóriában vagy lemezen tárolni, és csak hivatkozást átadni (például URI, azonosító).
- Más adatátviteli mechanizmusokat használni nagy adatmennyiség esetén (például helyi socketek, médiakiszolgálók).
- Nagy adatokat kisebb részekre bontani, és több tranzakcióban továbbítani.
// Példa, ami TransactionTooLargeException-hez vezethet
Intent intent = new Intent(this, TargetActivity.class);
Bundle bundle = new Bundle();
byte[] largeData = new byte[1024 * 1024 * 2]; // 2MB adat
bundle.putByteArray("data", largeData);
intent.putExtra("bundle", bundle);
startActivity(intent); // Itt kiváltható kivétel