android - Android 中的自定义字体泄漏内存

标签 android fonts

我在应用程序中的 TextView 中使用自定义字体,当我使用这些字体时,我发现它消耗了大量内存(泄漏内存)。每次我进入此 Activity 并使用此字体时,堆大小都会增加。当我从此类中删除 TextView 的自定义字体时,我注意到内存消耗减少了。请查看我的示例代码。我在下面发布

 public class TrebuchetItalicTextView extends TextView {

    private static final String fontName = "Trebuchet-ms-italic";


    public TrebuchetItalicTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        if (!isInEditMode()) {

            synchronized (PSDataCache.getSharedCache().getFontCache()) {

                if (!PSDataCache.getSharedCache().getFontCache()
                        .containsKey(fontName)) {
                    Typeface tf = Typeface.createFromAsset(context.getAssets(),
                            "fonts/trebucit_0.ttf");
                    PSDataCache.getSharedCache().setFontCache(fontName, tf);
                }

                setTypeface(PSDataCache.getSharedCache().getFontCache()
                        .get(fontName));

            }

        }

    }

}

我在 XML 中使用此类,如下所示。

<com.android.customviews.TrebuchetItalicTextView
                        android:id="@+id/text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentTop="true"
                        android:layout_marginLeft="15dp"
                        android:text="Lorem ipsum dolor sit amet."
                        android:textColor="#727272"
                        android:textSize="16sp"
                        android:textStyle="italic" />

另外,当使用自定义 View 时,请看一下内存愚蠢。

** MEMINFO in pid 10045 [com.android.test] **
                         Shared  Private     Heap     Heap     Heap
                   Pss    Dirty    Dirty     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------
       Native        0        0        0    15596    14337     1258
       Dalvik    44483    11156    44292    64775    43074    21701
       Cursor        0        0        0                           
       Ashmem        0        0        0                           
    Other dev        4       36        0                           
     .so mmap     5380     2196     4752                           
    .jar mmap        0        0        0                           
    .apk mmap      362        0        0                           
    .ttf mmap      102        0        0                           
    .dex mmap      964        0        0                           
   Other mmap     1283      320      204                           
      Unknown     9452      528     9448                           
        TOTAL    62030    14236    58696    80371    57411    22959

 Objects
               Views:      981         ViewRootImpl:        2
         AppContexts:        4           Activities:        3
              Assets:       28        AssetManagers:       28
       Local Binders:       16        Proxy Binders:       19
    Death Recipients:        0
     OpenSSL Sockets:        1

 SQL
         MEMORY_USED:        0
  PAGECACHE_OVERFLOW:        0          MALLOC_SIZE:        0


 Asset Allocations
    zip:/data/app/com.android.test-2.apk:/resources.arsc: 135K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS.ttf: 133K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS.ttf: 133K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS.ttf: 133K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS.ttf: 133K
    zip:/data/app/com.android.test-2.apk:/assets/fonts/Trebuchet MS Bold.ttf: 123K

我已将自定义字体放入 Assets 中。谁能指出我哪里错了。非常感谢在这种情况下的任何帮助。

最佳答案

这是使用自定义字体时非常常见的内存泄漏,我对此问题报告有解决方案:https://code.google.com/p/android/issues/detail?id=9904

关于android - Android 中的自定义字体泄漏内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23977114/

相关文章:

windows-phone-7 - Windows Phone 7 字体

java - 我如何从 Activity 中打开 android.support.v4.app.Fragment

java - Kotlin 术语 "mutable"错了吗?

android - Add an item at current progressBar position - 创建自定义进度条

css - 字体被 firefox 和 chrome 侵 eclipse

swift - 如何处理 tvOS 字体 SpriteKit

android - 如何从 asp.net web 服务检索 base64 字符串到 android

Android NSD onServiceFound() 没有被调用

javascript - 覆盖更改字体系列 react native android

Java:获取具有特定高度(以像素为单位)的字体