Sobes.tech
Junior — Middle

Ի՞նչ պատճառներ են դարձնում Bitmap օբյեկտի փոխանցումը Intent-ի միջոցով անարդյունավետ, և ինչ այլընտրանքներ կան պատկերների փոխանցման համար կոմպոնենտների միջև։

sobes.tech AI

Պատասխան AI-ից

Android-ում Bitmap օբյեկտի փոխանցումը Intent-ի միջոցով մի քանի պատճառներով նպատակահարմար չէ.

  • Մեծ տվյալների չափը: Bitmap-ը կարող է շատ հիշողություն պահանջել, ինչը հանգեցնում է Intent-ի չափի սահմանաչափի (համարապես մոտ 1 ՄԲ) գերազանցմանը, ինչը հանգեցնում է TransactionTooLargeException սխալի:
  • Աշխատունակություն: Bitmap-ի սերիալիզացիան և դեսերիալիզացիան Intent-ում դանդաղեցնում է հավելվածը:
  • Հիշողության արտահոսքի ռիսկ: Բարեխառն կառավարման բացթողումները կարող են հանգեցնել հիշողության արտահոսքի:

Ալտերնատիվներ՝ պատկերները փոխանցելու համար՝

  1. URI կամ ֆայլի ուղու փոխանցում: Պատկերը պահեք ներքին կամ արտաքին պահեստում և փոխանցեք ուղին կամ URI-ն Intent-ի միջոցով:
  2. Singleton կամ գլոբալ պահեստի օգտագործում: Պահպանեք Bitmap-ը հիշողության մեջ՝ որպես ստատիկ դաշտ կամ ViewModel (Activity/Fragment դեպքում):
  3. Տվյալների բազա կամ 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-ն և բեռնել նկարը ֆայլից։