Sobes.tech
Junior — Middle

Kādi iemesli padara Bitmap objekta pārsūtīšanu caur Intent neizdevīgu, un kādas alternatīvas ir pieejamas attēlu pārsūtīšanai starp komponentiem?

sobes.tech AI

Atbilde no AI

Objekta Bitmap pārsūtīšana caur Intent Android sistēmā nav ieteicama vairāku iemeslu dēļ:

  • Liels datu apjoms: Bitmap var aizņemt daudz atmiņas, kas pārsniedz Intent izmēra limitu (parasti ap 1 MB), izraisot kļūdu TransactionTooLargeException.
  • Veiktspēja: Bitmap serializācija un deserializācija Intentā palēnina lietotni.
  • Atmiņas noplūdes risks: Nepareiza Bitmap pārvaldība var novest pie atmiņas noplūdēm.

Alternatīvas attēlu pārsūtīšanai starp komponentiem:

  1. URI vai faila ceļa nodošana: Saglabājiet attēlu iekšējā vai ārējā glabātuvē un nododiet ceļu vai URI caur Intent.
  2. Singleton vai globālas glabāšanas izmantošana: Saglabājiet Bitmap atmiņā statiskā laukā vai caur ViewModel (ja tas ir Activity/Fragment gadījumā).
  3. Datu bāzes vai keša izmantošana: Saglabājiet attēlu datu bāzē vai kešā un nododiet identifikatoru.

URI nodošanas piemērs:

// Saglabājiet Bitmap failā
File file = new File(context.getCacheDir(), "image.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();

// Nododiet URI caur Intent
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("image_uri", Uri.fromFile(file).toString());
startActivity(intent);

TargetActivity var saņemt URI un ielādēt attēlu no faila.