বেশিরভাগ ক্ষেত্রে, রূপান্তর ফাংশনগুলি ঘন ঘন বলা হয়। আমরা মেমোয়েজেশন যুক্ত করে এটি অনুকূল করতে পারি। সুতরাং, এটি প্রতিবার ফাংশন বলা হয়ে থাকে তা গণনা করে না।
আসুন একটি হ্যাশম্যাপ ঘোষণা করুন যা গণনা করা মানগুলি সংরক্ষণ করবে।
private static Map<Float, Float> pxCache = new HashMap<>();
একটি ফাংশন যা পিক্সেল মানগুলি গণনা করে:
public static float calculateDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
একটি স্মৃতি ফাংশন যা হ্যাশম্যাপ থেকে মানটি দেয় এবং পূর্ববর্তী মানগুলির রেকর্ড বজায় রাখে।
জাভাতে মেমোয়েজেশন বিভিন্নভাবে প্রয়োগ করা যেতে পারে। জাভা 7 এর জন্য :
public static float convertDpToPixel(float dp, final Context context) {
Float f = pxCache.get(dp);
if (f == null) {
synchronized (pxCache) {
f = calculateDpToPixel(dp, context);
pxCache.put(dp, f);
}
}
return f;
}
জাভা 8 লাম্বদা ফাংশন সমর্থন করে :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
ধন্যবাদ।