اگر مراقب نباشید، کار با تصاویر می تواند به سرعت مشکلات عملکرد را ایجاد کند. هنگام کار با بیت مپ های بزرگ به راحتی می توانید با یک OutOfMemoryError
مواجه شوید. این بهترین شیوهها را دنبال کنید تا مطمئن شوید برنامهتان بهترین عملکرد را دارد.
فقط اندازه بیت مپ مورد نیاز خود را بارگیری کنید
اکثر گوشی های هوشمند دارای دوربین هایی با وضوح بالا هستند که فایل های تصویری بزرگ تولید می کنند. اگر تصویری را روی صفحه نمایش میدهید، باید وضوح تصویر را کاهش دهید یا فقط تصویر را تا اندازه ظرف تصویر خود بارگیری کنید. بارگذاری مداوم تصاویر بزرگتر از حد مورد نیاز می تواند حافظه پنهان GPU را خسته کند و منجر به رندر UI عملکرد کمتری شود.
برای مدیریت اندازه تصویر:
- حجم فایل های تصویری خود را تا حد امکان کوچک کنید (بدون تاثیر بر روی تصویر خروجی).
- به جای JPEG یا PNG ، تصاویر خود را به فرمت WEBP تبدیل کنید .
- ارائه تصاویر کوچکتر برای وضوح های مختلف صفحه (به نکته شماره 3 مراجعه کنید)،
- از کتابخانه بارگیری تصویر استفاده کنید، که تصویر شما را به اندازه نمای شما بر روی صفحه نمایش کوچک می کند. این می تواند به بهبود عملکرد بارگیری صفحه نمایش شما کمک کند.
در صورت امکان از بردارها روی نقشه های بیتی استفاده کنید
هنگامی که چیزی را به صورت بصری بر روی صفحه نمایش می دهید، باید تصمیم بگیرید که آیا می توان آن را به صورت برداری نمایش داد یا خیر. تصاویر برداری را به بیت مپ ترجیح دهید، زیرا وقتی آنها را در اندازه های مختلف مقیاس می کنید، پیکسلی نمی شوند. با این حال، همه چیز را نمی توان به صورت وکتور نشان داد - تصاویر گرفته شده با دوربین را نمی توان به وکتور تبدیل کرد.
منابع جایگزین را برای اندازه های مختلف صفحه نمایش فراهم کنید
اگر در حال ارسال تصاویر با برنامه خود هستید، در نظر بگیرید دارایی هایی با اندازه های مختلف برای وضوح های مختلف دستگاه ارائه دهید. این میتواند به کاهش حجم دانلود برنامه شما در دستگاهها و بهبود عملکرد کمک کند، زیرا تصویری با وضوح پایینتر در دستگاهی با وضوح پایینتر بارگیری میکند. برای اطلاعات بیشتر در مورد تهیه بیت مپ های جایگزین برای اندازه های مختلف دستگاه، اسناد بیت مپ جایگزین را بررسی کنید .
هنگام استفاده از ImageBitmap
، قبل از ترسیم، prepareToDraw
فراخوانی کنید
هنگام استفاده از ImageBitmap
، برای شروع فرآیند آپلود بافت در GPU، ImageBitmap#prepareToDraw()
قبل از ترسیم آن فراخوانی کنید. این به GPU کمک می کند تا بافت را آماده کند و عملکرد نمایش تصویر روی صفحه را بهبود بخشد. اکثر کتابخانه های بارگذاری تصویر قبلاً این بهینه سازی را انجام می دهند، اما اگر خودتان با کلاس ImageBitmap
کار می کنید، باید به خاطر داشته باشید.
ترجیح می دهید یک Int
DrawableRes
یا URL را به عنوان پارامتر به composable خود به جای Painter
ارسال کنید.
به دلیل پیچیدگی های برخورد با تصاویر (به عنوان مثال، نوشتن یک تابع برابر برای Bitmaps
از نظر محاسباتی گران است)، API Painter
به صراحت به عنوان یک کلاس Stable علامت گذاری نشده است. کلاس های ناپایدار می توانند منجر به ترکیب مجدد غیرضروری شوند زیرا کامپایلر نمی تواند به راحتی استنباط کند که داده ها تغییر کرده اند.
بنابراین، ترجیحاً به جای ارسال Painter
به عنوان پارامتر، URL یا شناسه منبع قابل ترسیم را به عنوان پارامتر به composable خود ارسال کنید.
// Prefer this:
@Composable
fun MyImage(url: String) {
}
// Over this:
@Composable
fun MyImage(painter: Painter) {
}
یک بیت مپ را بیشتر از زمانی که نیاز دارید در حافظه ذخیره نکنید
هر چه بیت مپ های بیشتری را در حافظه بارگذاری کنید، احتمال اینکه حافظه دستگاه تمام شود بیشتر است. به عنوان مثال، اگر لیست بزرگی از تصاویر را روی صفحه بارگیری می کنید، از LazyColumn
یا LazyRow
استفاده کنید تا اطمینان حاصل کنید که هنگام پیمایش یک لیست بزرگ، حافظه آزاد می شود.
تصاویر بزرگ را با فایل AAB/APK خود بسته بندی نکنید
یکی از دلایل اصلی برای دانلود برنامه بزرگ به دلیل گرافیک هایی است که در داخل فایل AAB یا APK بسته بندی شده اند. از ابزار تحلیلگر APK استفاده کنید تا مطمئن شوید که فایل های تصویری بزرگتر از مقدار مورد نیاز را بسته بندی نمی کنید. اندازه ها را کاهش دهید یا در نظر بگیرید که تصاویر را روی سرور قرار دهید و فقط در صورت نیاز آنها را دانلود کنید.
{% کلمه به کلمه %}برای شما توصیه می شود
- توجه: وقتی جاوا اسکریپت خاموش است، متن پیوند نمایش داده می شود
- ImageBitmap در مقابل ImageVector {:#bitmap-vs-vector}
- وضعیت رابط کاربری را در Compose ذخیره کنید
- فازهای نوشتن جت پک