【问题标题】:Custom font in Android Leaking memory [duplicate]Android中的自定义字体泄漏内存[重复]
【发布时间】:2014-07-21 13:01:29
【问题描述】:

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

 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" />

当使用自定义视图时,请看一下内存哑巴。

** 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

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

【问题讨论】:

  • 嗯,您正在将字体添加到缓存中。所以是的,只要缓存继续存在并且该字体没有被踢出缓存,该字体将继续使用内存。
  • “大量”内存是多少?
  • @Karakuri:实际上,当不使用自定义字体时,堆使用率大约在 60%- 64% 左右,而当它突然使用时,它会飙升到 87%。然后整个应用程序变得缓慢或有时崩溃。它也适用于 Nexus 7、Nexus 10 英寸等高端设备。但在低端设备上,这成为一个问题。

标签: android fonts


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多