Dans la plupart des cas, les fonctions de conversion sont fréquemment appelées. Nous pouvons l'optimiser en ajoutant la mémorisation. Ainsi, il ne calcule pas chaque fois que la fonction est appelée.
Déclarons un HashMap qui stockera les valeurs calculées.
private static Map<Float, Float> pxCache = new HashMap<>();
Une fonction qui calcule les valeurs des pixels:
public static float calculateDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
Une fonction de mémorisation qui renvoie la valeur de HashMap et conserve l'enregistrement des valeurs précédentes.
La mémorisation peut être implémentée de différentes manières en Java. Pour 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 prend en charge la fonction Lambda :
public static float convertDpToPixel(float dp, final Context context) {
pxCache.computeIfAbsent(dp, y ->calculateDpToPixel(dp,context));
}
Merci.