Junior — Middle
Milyen okok miatt nem praktikus egy Bitmap objektum átadása Intenttel, és milyen alternatívák léteznek képek közötti átadásra?
sobes.tech MI
Válasz az MI-től
A Bitmap objektum Intenten keresztüli továbbítása Androidban több okból sem célszerű:
- Nagy adatméret: A Bitmap sok memóriát foglalhat, ami meghaladja az Intent méretkorlátját (általában kb. 1 MB), és TransactionTooLargeException hibát okoz.
- Teljesítmény: A Bitmap serializálása és deserializálása az Intentben lassítja az alkalmazást.
- Memóriaszivárgás kockázata: A Bitmap helytelen kezelése memóriaszivárgáshoz vezethet.
Alternatívák az adatok átadására komponensek között:
- URI vagy fájlútvonal átadása: Mentse a képet belső vagy külső tárhelyre, és az útvonalat vagy URI-t adja át Intenttel.
- Singleton vagy globális tárolás használata: Tárolja a Bitmapet memóriában egy statikus mezőben vagy ViewModel segítségével (Activity/Fragment esetén).
- Adatbázis vagy cache használata: Mentse a képet adatbázisba vagy cache-be, és azonosítót adjon át.
URI átadás példája:
// Bitmap mentése fájlba
File file = new File(context.getCacheDir(), "image.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
// URI átadása Intenttel
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("image_uri", Uri.fromFile(file).toString());
startActivity(intent);
A TargetActivity-ben az URI-t lekérheti és a fájlból betöltheti a képet.