【发布时间】:2012-01-26 17:41:13
【问题描述】:
设置:
我有这个应用程序,它在线性路径中有 4 个活动,非常简单的导航: A -> B -> C -> D
所有活动共享相同的背景图像,并且都有几个常规按钮,一个文本视图或一个编辑文本。所有这些都在单独的视图 xml 文件中定义。
背景是渐变的,有点重。大约 3 兆作为未压缩的位图。
应用程序什么也不做,其中唯一的逻辑是启动活动并在单击按钮时关闭它们
我尝试使用 MAT 查找内存泄漏,但找不到任何东西。我的应用程序中最大的保留大小是 656(ko?),应用程序的总保留大小是 1520(ko?),我找不到任何会重复的对象。 顺便说一句,这与显示 27300(ko?) 已分配的 dumpsys 完全矛盾
问题:
- 当我向上导航时,我发现内存使用量增加了相当于背景大小。
- 当我向下导航、使用返回按钮或完成命令关闭活动时,应用程序的内存使用量不会减少。
- 如果我从 A 转到 D 然后回到 B 并旋转屏幕,应用程序强制关闭并出现 OutOfMemory 异常。
问题:
更新:我想真正的问题是为什么我有一个巨大的内存泄漏(一次 5 兆),冻结时应用程序大小为 27 兆,而我在 MAT 中看不到它?
- 为什么 Android 会多次解压缩同一背景,每个活动一次?似乎效率低下。
- 是否可以通过使用主题来解决这个问题,或者我会看到相同的“按活动分配 1 个背景”的怪异现象?
- 为什么活动关闭后没有回收?
- 为什么 MAT 和 dumpsys 显示不同的数字?
线索
在同一时间我有: 转储系统内存信息:
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
还有这棵支配树:
感谢任何知道我要寻找什么线索的人。
【问题讨论】: