Dalam sebagian besar kasus, fungsi konversi sering dipanggil. Kami dapat mengoptimalkannya dengan menambahkan memoisasi. Jadi, itu tidak menghitung setiap kali fungsi dipanggil.
Mari mendeklarasikan HashMap yang akan menyimpan nilai yang dihitung.
private static Map<Float, Float> pxCache = new HashMap<>();
Fungsi yang menghitung nilai piksel:
public static float calculateDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
Fungsi memoisasi yang mengembalikan nilai dari HashMap dan memelihara catatan nilai sebelumnya.
Memoisasi dapat diimplementasikan dengan berbagai cara di Jawa. Untuk Java 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;
}
Java 8 mendukung fungsi Lambda :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
Terima kasih.