আপনি যদি সতর্ক না হন তবে চিত্রগুলির সাথে কাজ করা দ্রুত কার্যকারিতা সমস্যাগুলি উপস্থাপন করতে পারে। বড় বিটম্যাপের সাথে কাজ করার সময় আপনি খুব সহজেই একটি OutOfMemoryError
এ চালাতে পারেন। আপনার অ্যাপটি সর্বোত্তম পারফর্ম করছে তা নিশ্চিত করতে এই সেরা অনুশীলনগুলি অনুসরণ করুন।
শুধুমাত্র আপনার প্রয়োজনীয় বিটম্যাপের আকার লোড করুন
বেশিরভাগ স্মার্টফোনে উচ্চ রেজোলিউশনের ক্যামেরা থাকে যা বড় ইমেজ ফাইল তৈরি করে। আপনি যদি স্ক্রিনে একটি ছবি দেখান, তাহলে আপনাকে অবশ্যই ছবির রেজোলিউশন কমাতে হবে অথবা শুধুমাত্র আপনার ছবির কন্টেইনারের আকার পর্যন্ত ছবিটি লোড করতে হবে। প্রয়োজনের চেয়ে বড় ইমেজ ক্রমাগত লোড করা GPU ক্যাশে নিঃশেষ করতে পারে, যার ফলে কম পারফরম্যান্ট UI রেন্ডারিং হয়।
ছবির আকার পরিচালনা করতে:
- আপনার ইমেজ ফাইলগুলিকে যতটা সম্ভব ছোট করুন (আউটপুট ইমেজকে প্রভাবিত না করে)।
- JPEG বা PNG এর পরিবর্তে আপনার ছবিগুলিকে WEBP ফর্ম্যাটে রূপান্তর করার কথা বিবেচনা করুন৷
- বিভিন্ন স্ক্রীন রেজোলিউশনের জন্য ছোট ছবি সরবরাহ করুন ( টিপ #3 দেখুন),
- একটি ইমেজ লোডিং লাইব্রেরি ব্যবহার করুন, যা স্ক্রীনে আপনার দৃশ্যের আকারের সাথে মানানসই করার জন্য আপনার চিত্রকে ছোট করে। এটি আপনার স্ক্রিনের লোডিং কর্মক্ষমতা উন্নত করতে সাহায্য করতে পারে।
যেখানে সম্ভব বিটম্যাপের উপর ভেক্টর ব্যবহার করুন
পর্দায় দৃশ্যমানভাবে কিছু উপস্থাপন করার সময়, আপনাকে এটি একটি ভেক্টর হিসাবে উপস্থাপন করা যেতে পারে কিনা তা নির্ধারণ করতে হবে। বিটম্যাপের চেয়ে ভেক্টর চিত্রগুলিকে প্রাধান্য দিন, কারণ আপনি যখন সেগুলিকে বিভিন্ন আকারে স্কেল করেন তখন সেগুলি পিক্সেলেট হয় না। যাইহোক, সবকিছুকে ভেক্টর হিসাবে উপস্থাপন করা যায় না - ক্যামেরা দিয়ে তোলা ছবিগুলিকে ভেক্টরে রূপান্তর করা যায় না।
বিভিন্ন স্ক্রিনের আকারের জন্য বিকল্প সংস্থান সরবরাহ করুন
আপনি যদি আপনার অ্যাপের মাধ্যমে ছবি পাঠান, তাহলে বিভিন্ন ডিভাইস রেজোলিউশনের জন্য বিভিন্ন আকারের সম্পদ সরবরাহ করার কথা বিবেচনা করুন। এটি ডিভাইসে আপনার অ্যাপের ডাউনলোডের আকার কমাতে এবং কর্মক্ষমতা উন্নত করতে সাহায্য করতে পারে কারণ এটি একটি কম রেজোলিউশন ডিভাইসে একটি কম রেজোলিউশনের ছবি লোড করবে। বিভিন্ন ডিভাইসের আকারের জন্য বিকল্প বিটম্যাপ প্রদানের বিষয়ে আরও তথ্যের জন্য, বিকল্প বিটম্যাপ ডকুমেন্টেশন দেখুন ।
ImageBitmap
ব্যবহার করার সময়, অঙ্কন করার আগে prepareToDraw
কল করুন
ImageBitmap
ব্যবহার করার সময়, জিপিইউতে টেক্সচার আপলোড করার প্রক্রিয়া শুরু করতে, এটি আসলে আঁকার আগে ImageBitmap#prepareToDraw()
কল করুন। এটি GPU কে টেক্সচার প্রস্তুত করতে এবং স্ক্রিনে ভিজ্যুয়াল দেখানোর কর্মক্ষমতা উন্নত করতে সাহায্য করে। বেশিরভাগ ইমেজ লোডিং লাইব্রেরিগুলি ইতিমধ্যেই এই অপ্টিমাইজেশানটি করে, তবে আপনি যদি নিজেই ImageBitmap
ক্লাসের সাথে কাজ করেন তবে এটি মনে রাখতে হবে।
Painter
পরিবর্তে আপনার কম্পোজেবলে প্যারামিটার হিসাবে একটি Int
DrawableRes
বা URL পাস করা পছন্দ করুন
চিত্রগুলির সাথে কাজ করার জটিলতার কারণে (উদাহরণস্বরূপ, Bitmaps
জন্য একটি সমান ফাংশন লেখা গণনাগতভাবে ব্যয়বহুল হবে), Painter
API স্পষ্টভাবে একটি স্থিতিশীল শ্রেণি হিসাবে চিহ্নিত করা হয়নি। অস্থির ক্লাসগুলি অপ্রয়োজনীয় পুনর্গঠনের দিকে পরিচালিত করতে পারে কারণ কম্পাইলার সহজেই অনুমান করতে পারে না যদি ডেটা পরিবর্তিত হয়।
অতএব, প্যারামিটার হিসাবে একটি Painter
পাস করার পরিবর্তে আপনার কম্পোজেবলের প্যারামিটার হিসাবে একটি URL বা অঙ্কনযোগ্য রিসোর্স আইডি পাস করা বাঞ্ছনীয়৷
// Prefer this:
@Composable
fun MyImage(url: String) {
}
// Over this:
@Composable
fun MyImage(painter: Painter) {
}
আপনার প্রয়োজনের চেয়ে বেশি সময় মেমরিতে বিটম্যাপ সংরক্ষণ করবেন না
আপনি যত বেশি বিটম্যাপ মেমরিতে লোড করবেন, ডিভাইসে আপনার মেমরি ফুরিয়ে যাওয়ার সম্ভাবনা তত বেশি। উদাহরণস্বরূপ, যদি স্ক্রিনে ইমেজ কম্পোজেবলের একটি বড় তালিকা লোড করা হয়, একটি বড় তালিকা স্ক্রোল করার সময় মেমরি খালি করা হয়েছে তা নিশ্চিত করতে LazyColumn
বা LazyRow
ব্যবহার করুন।
আপনার AAB/APK ফাইল দিয়ে বড় ছবি প্যাকেজ করবেন না
AAB বা APK ফাইলের ভিতরে প্যাকেজ করা গ্রাফিক্সের কারণে বড় অ্যাপ ডাউনলোডের আকারের অন্যতম প্রধান কারণ। আপনি প্রয়োজনীয় ইমেজ ফাইলের চেয়ে বড় প্যাকেজিং করছেন না তা নিশ্চিত করতে APK বিশ্লেষক টুল ব্যবহার করুন। সাইজ কমিয়ে দিন বা সার্ভারে ছবি রাখার কথা বিবেচনা করুন এবং প্রয়োজন হলেই ডাউনলোড করুন।
{% শব্দার্থে %}আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়
- ইমেজবিটম্যাপ বনাম ইমেজভেক্টর {:#bitmap-vs-vector}
- রচনায় UI অবস্থা সংরক্ষণ করুন
- Jetpack রচনা পর্যায়