Sobes.tech
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:

  1. 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.
  2. 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).
  3. 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.