Junior — Middle
Ի՞նչ պատճառներ են դարձնում Bitmap օբյեկտի փոխանցումը Intent-ի միջոցով անարդյունավետ, և ինչ այլընտրանքներ կան պատկերների փոխանցման համար կոմպոնենտների միջև։
sobes.tech AI
Պատասխան AI-ից
Android-ում Bitmap օբյեկտի փոխանցումը Intent-ի միջոցով մի քանի պատճառներով նպատակահարմար չէ.
- Մեծ տվյալների չափը: Bitmap-ը կարող է շատ հիշողություն պահանջել, ինչը հանգեցնում է Intent-ի չափի սահմանաչափի (համարապես մոտ 1 ՄԲ) գերազանցմանը, ինչը հանգեցնում է TransactionTooLargeException սխալի:
- Աշխատունակություն: Bitmap-ի սերիալիզացիան և դեսերիալիզացիան Intent-ում դանդաղեցնում է հավելվածը:
- Հիշողության արտահոսքի ռիսկ: Բարեխառն կառավարման բացթողումները կարող են հանգեցնել հիշողության արտահոսքի:
Ալտերնատիվներ՝ պատկերները փոխանցելու համար՝
- URI կամ ֆայլի ուղու փոխանցում: Պատկերը պահեք ներքին կամ արտաքին պահեստում և փոխանցեք ուղին կամ URI-ն Intent-ի միջոցով:
- Singleton կամ գլոբալ պահեստի օգտագործում: Պահպանեք Bitmap-ը հիշողության մեջ՝ որպես ստատիկ դաշտ կամ ViewModel (Activity/Fragment դեպքում):
- Տվյալների բազա կամ cache-ի օգտագործում: Պահպանեք պատկերն տվյալների բազայում կամ cache-ում և փոխանցեք նույնականացուցիչը:
URI փոխանցելու օրինակ՝
// Bitmap-ը պահեք ֆայլում
File file = new File(context.getCacheDir(), "image.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
// URI-ն փոխանցեք Intent-ի միջոցով
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("image_uri", Uri.fromFile(file).toString());
startActivity(intent);
TargetActivity-ում կարող եք ստանալ URI-ն և բեռնել նկարը ֆայլից։