Android应用程序大量使用RAM的原因及如何减少

4

当我多次启动和退出我的应用程序时,它的RAM使用量会增加到超过500 MB。我使用adb shell dumpsys meminfo检查内存转储时发现未知的pss value是问题的原因。什么是大pss值的原因,我该如何降低pss值。

Shared  Private     Heap     Heap     Heap

                   Pss    Dirty    Dirty     Size    Alloc     Free

                ------   ------   ------   ------   ------   ------

       Native        0        0        0   534460   531827     1604
       Dalvik    51013    17868    50664    90480    82266     8214
       Cursor        0        0        0                           
       Ashmem        0        0        0                           
    Other dev    14292       52    14288                           
     .so mmap     3810     2320     1720                           
    .jar mmap        0        0        0                           
    .apk mmap     1305        0        0                           
    .ttf mmap        0        0        0                           
    .dex mmap     2960        0        0                           
   Other mmap     1738      440      236                           
      Unknown   504718      296   384284                           
        TOTAL   579836    20976   451192   624940   614093     9818

应用程序的Dalvik堆大小变化不大,本地堆大小随着使用而增加。 - anujprashar
1个回答

7
我发现高RAM使用率的原因。当我分析应用程序的本地堆转储时,我得知库实例libharfbuzz.so占据了大量空间,该库用于显示字体,因此在检查代码时,代码中有很多TypeFace实例被创建在很多地方。由于TypeFace在本机内存中分配,并且使本机堆大小变大,这就是为什么RAM使用率更高的原因。我删除了那些实例并创建了单个TypeFace实例,在我的应用程序中使用它,RAM使用率降低了。

如何获取本地堆转储并进行分析? - Ankit Bansal
@AnkitBansal 这个链接 http://bricolsoftconsulting.com/how-to-enable-native-heap-tracking-in-ddms/ 对我帮助很大。 - anujprashar
@anuj 字体信息对我帮助很大...在搜索了几个月后,我终于找到了答案。修改自定义 TextView 以使用全局静态创建的 Typeface。现在内存大小从之前的 300Mb 减少到了 20Mb。 - harshal
我遇到了同样的问题。我正在使用更多和更大尺寸的图像来开发一个应用程序,我检查了Android Studio内存,应用程序在使用/播放时将占用100MB。我不知道如何减少这个问题?请帮帮我。提前感谢。@harshal - Sakthivel Appavu
通过使用库来移除自定义字体的使用,帮助我减少了50%的内存使用。 - fida1989

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接