Junior — Middle
Intent vasitəsilə Bitmap obyektinin ötürülməsini niyə qeyri-praktik edir və komponentlər arasında şəkillərin ötürülməsi üçün hansı alternativlər mövcuddur?
sobes.tech Süni İntellekt
AI-dan cavab
Android-də Bitmap obyektini Intent vasitəsilə ötürmək bir neçə səbəbdən məqsədəuyğun deyil:
- Böyük məlumat ölçüsü: Bitmap çox yaddaş tutə bilər, bu da Intent-in ölçü limitini (adətən təxminən 1 MB) aşmasına səbəb olur və TransactionTooLargeException xətasına gətirib çıxarır.
- Performans: Bitmap-in Intent-də seriyalaşdırılması və deserializəsi tətbiqin yavaşlamasına səbəb olur.
- Yaddaş sızması riski: Bitmap-in düzgün idarə olunmaması yaddaş sızmasına səbəb ola bilər.
Komponentlər arasında şəkil ötürmək üçün alternativlər:
- URI və ya fayl yolunu ötürmək: Şəkli daxili və ya xarici yaddaşda saxlayın və yol və ya URI-ni Intent vasitəsilə ötürün.
- Singleton və ya qlobal yaddaşdan istifadə: Bitmap-i statik sahədə və ya ViewModel vasitəsilə yaddaşda saxlayın (Activity/Fragment halında).
- Verilənlər bazası və ya keşi istifadə edin: Şəkli verilənlər bazasında və ya keşdə saxlayın və identifikatoru ötürün.
URI ötürmə nümunəsi:
// Bitmap-i fayla yadda saxlayın
File file = new File(context.getCacheDir(), "image.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
// URI-ni Intent vasitəsilə ötürün
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("image_uri", Uri.fromFile(file).toString());
startActivity(intent);
TargetActivity-də URI-ni əldə edə və fayldan şəkil yükləyə bilərsiniz.