|
@@ -0,0 +1,43 @@
|
|
|
+package com.afollestad.materialdialogs;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.graphics.Typeface;
|
|
|
+import android.support.v4.util.SimpleArrayMap;
|
|
|
+
|
|
|
+/*
|
|
|
+ Each call to Typeface.createFromAsset will load a new instance of the typeface into memory,
|
|
|
+ and this memory is not consistently get garbage collected
|
|
|
+ http://code.google.com/p/android/issues/detail?id=9904
|
|
|
+ (It states released but even on Lollipop you can see the typefaces accumulate even after
|
|
|
+ multiple GC passes)
|
|
|
+
|
|
|
+ You can detect this by running:
|
|
|
+ adb shell dumpsys meminfo com.your.packagenage
|
|
|
+
|
|
|
+ You will see output like:
|
|
|
+
|
|
|
+ Asset Allocations
|
|
|
+ zip:/data/app/com.your.packagenage-1.apk:/assets/Roboto-Medium.ttf: 125K
|
|
|
+ zip:/data/app/com.your.packagenage-1.apk:/assets/Roboto-Medium.ttf: 125K
|
|
|
+ zip:/data/app/com.your.packagenage-1.apk:/assets/Roboto-Medium.ttf: 125K
|
|
|
+ zip:/data/app/com.your.packagenage-1.apk:/assets/Roboto-Regular.ttf: 123K
|
|
|
+ zip:/data/app/com.your.packagenage-1.apk:/assets/Roboto-Medium.ttf: 125K
|
|
|
+
|
|
|
+*/
|
|
|
+public class TypefaceHelper {
|
|
|
+
|
|
|
+ private static final SimpleArrayMap<String, Typeface> cache = new SimpleArrayMap<>();
|
|
|
+
|
|
|
+ public static Typeface get(Context c, String name) {
|
|
|
+ synchronized (cache) {
|
|
|
+ if (!cache.containsKey(name)) {
|
|
|
+ Typeface t = Typeface.createFromAsset(
|
|
|
+ c.getAssets(), String.format("fonts/%s.ttf", name));
|
|
|
+ cache.put(name, t);
|
|
|
+ return t;
|
|
|
+ }
|
|
|
+ return cache.get(name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|