我的android应用程序内存使用量太大(内存管理器报告)

我的android应用程序内存使用量太大(内存管理器报告),android,memory,bitmap,live-wallpaper,hprof,Android,Memory,Bitmap,Live Wallpaper,Hprof,我有一个实时壁纸应用程序,它使用从web下载的照片作为壁纸 内存管理器显示我的应用程序使用的内存在90MB到120MB之间(这是一个1GB内存的设备)。那太多了。墙纸服务经常被删除,有时系统甚至会恢复为默认的静态墙纸 尽管我彻底检查了内存泄漏,HPROF转储分析显示我只有两个大对象在使用:当前使用的墙纸位图(16MB-这是4Mpix图像的预期值)和类android.content.res.Resource(12MB),总容量32MB,如HPROF概览屏幕中所述 dumpsys meminfo显示

我有一个实时壁纸应用程序,它使用从web下载的照片作为壁纸

内存管理器显示我的应用程序使用的内存在90MB到120MB之间(这是一个1GB内存的设备)。那太多了。墙纸服务经常被删除,有时系统甚至会恢复为默认的静态墙纸

尽管我彻底检查了内存泄漏,HPROF转储分析显示我只有两个大对象在使用:当前使用的墙纸位图(16MB-这是4Mpix图像的预期值)和类android.content.res.Resource(12MB),总容量32MB,如HPROF概览屏幕中所述

dumpsys meminfo显示以下内容:

** MEMINFO in pid 1354 [com.myapp.lwp] **
                     Shared  Private     Heap     Heap     Heap
               Pss    Dirty    Dirty     Size    Alloc     Free
            ------   ------   ------   ------   ------   ------
   Native       16       16       16   112304     5274      993
   Dalvik    41947    19316    41428    74572    53120    21452
   Cursor        0        0        0
   Ashmem        0        0        0
Other dev    20170    33176     3460
 .so mmap     5690     2620     1504
 .jar mmap        0        0        0
 .apk mmap       64        0        0
 .ttf mmap        6        0        0
 .dex mmap      604        0        4
Other mmap     1035      300      272
  Unknown     5127      472     5116
    TOTAL    74659    55900    51800   186876    58394    22445

Objects
           Views:       27         ViewRootImpl:        0
     AppContexts:        4           Activities:        1
          Assets:        3        AssetManagers:        3
   Local Binders:       16        Proxy Binders:       23
Death Recipients:        0
 OpenSSL Sockets:        1
我读了这篇文章:但这无助于我得出任何结论

我还使用了:

    cat /proc/1354/statm
    139422 29326 11550 2 0 10330 0
这也没什么帮助

DDMS显示63MB堆大小

我的问题是什么? 处理两倍屏幕大小的图像的应用程序是否正常,是否符合预期? 如果没有,剩余的60-90MB中有什么?(我分包了HPROF总共给我的30MB)。 我的应用程序使用了这么多内存,我可能做错了什么? 应用程序的实际功能:

1) Download list of photos (max 100) as JSON string and parse that string to get ids and urls for these photos.
2) Download first photo and save it to cache folder
3) Decode photo and if necessary resize it to fit 2Width*Height of screen (photos are actualy smaller that my Full HD screen).
4) Draw it on wallpaper canvas (and draw repeatedly while user is scrolling)
5) If on WIFI download next 10 photos to cache folder (without decoding, just saving)
我有其他更复杂的模式,同时使用更多的照片,但上面的内存使用是最简单的场景

这不是一个持续使用的问题-内存在首次启动后如下所述: 如果我终止服务,重新启动后它将使用90MB。第一次打开选项屏幕后(小活动/对话框,有几个选项可供选择-除背景绘图外没有图形),内存使用量跳到124MB,在屏幕关闭后返回112MB。在第一次更改壁纸照片后,它跳到130+并返回到120+。可能是因为在位图解码过程中堆大小增加了,然后保持不变


我该怎么办?如何减少(如果可能的话)我的应用程序内存占用?还有什么地方可以看?我不希望有现成的解决方案,但任何进一步的指导都会有所帮助。

我在处理我的应用程序时遇到了同样的问题。转储和GC(来自Logcat)都表明我正在使用大约30-50MB的内存,上下波动,这是正常的,因为GC在不同的时间运行

然而,由于某些原因,进程RAM的使用似乎只是在增加,而没有得到释放,特别是当您有一个正在运行的服务时。我的过程显示我的内存超过了300MB,所以我不确定它是没有发布(GCed已经发布)还是被泄露

我所做的验证是,在关闭应用程序后,我让它保持一段时间,几个小时后它显示我的服务只使用了3MB的RAM,而且,我打开了许多应用程序(强制Android执行GC),它再次从300MB恢复到3MB,而没有终止我的服务,所以我假设它只是在不进行GCG的情况下继续构建它,所以它没有泄露

这还是不够好的保险,但总比什么都没有好,我正在努力了解更多,希望能有所帮助

如果你能想出解决这个问题的办法,请告诉我,谢谢