安装 :
我有一个应用程序,其中包含4个具有线性路径的活动,导航非常简单: A -> B -> C -> D
所有活动都共享相同的背景图像,并且都具有一些常规按钮、文本视图或编辑文本。所有这些元素都在不同的视图xml文件中定义。
背景是渐变的,并且比较重。未压缩的位图大小约为3兆字节。
该应用程序还什么都没有实现,唯一的逻辑是在点击按钮时启动和关闭活动。
我尝试使用MAT查找内存泄漏,但找不到任何信息。我的应用程序中最大的保留大小为656(ko?),应用程序的总保留大小为1520(ko?),我找不到任何可能被复制的对象。 顺便说一下,这与dumpsys完全矛盾,dumpsys显示分配了27300(ko?)。
问题 :
- 当我向上导航时,我会看到内存使用量增加相当于背景大小的量。
- 当我向下导航时,使用后退按钮或完成命令关闭活动后,应用程序的内存使用量不会减少。
- 如果我从A转到D,然后返回B并旋转屏幕,则应用程序会因OutOfMemory异常而强制关闭。
问题 :
更新:我猜真正的问题是为什么我的应用程序有一个巨大的内存泄漏(每次5兆字节),在冻结时大小为27兆字节,但我无法在MAT中看到它?
- 为什么Android会多次解压相同的背景图,在每个活动中解压一次?似乎效率不高。
- 是否可以通过使用主题来解决此问题,还是会出现“为每个活动分配1个背景”的奇怪情况?
- 为什么关闭活动后,活动未被回收?
- 为什么MAT和dumpsys呈现不同的数字?
线索
正好在同一时间我有: dumpsys meminfo:
Applications Memory Usage (kB):
Uptime: 74006853 Realtime: 110962243
** MEMINFO in pid 22683 [com.kayenko.sosadresse] **
native dalvik other total
size: 20820 5767 N/A 26587
allocated: 18751 2901 N/A 21652
free: 312 2866 N/A 3178
(Pss): 1357 201 16782 18340
(shared dirty): 2264 1804 5456 9524
(priv dirty): 1280 116 16032 17428
Objects
Views: 0 ViewRoots: 0
AppContexts: 0 Activities: 0
Assets: 2 AssetManagers: 2
Local Binders: 18 Proxy Binders: 16
Death Recipients: 1
OpenSSL Sockets: 0
SQL
heap: 0 MEMORY_USED: 0
PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0
这是支配树:
感谢任何有线索的人能告诉我该寻找什么。