Trong hầu hết các trường hợp, các hàm chuyển đổi được gọi thường xuyên. Chúng ta có thể tối ưu hóa nó bằng cách thêm ghi nhớ. Vì vậy, nó không tính toán mỗi lần hàm được gọi.
Hãy khai báo HashMap sẽ lưu trữ các giá trị được tính toán.
private static Map<Float, Float> pxCache = new HashMap<>();
Một hàm tính toán các giá trị pixel:
public static float calculateDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
Hàm ghi nhớ trả về giá trị từ HashMap và duy trì bản ghi các giá trị trước đó.
Ghi nhớ có thể được thực hiện theo các cách khác nhau trong Java. Đối với 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 hỗ trợ chức năng Lambda :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
Cảm ơn.