内存是 Android 中一个非常棘手的主题。
每个应用程序都会根据设备获得堆内存限制。这个堆内存是dalvik内存加上本机内存,你可以在dumpsys meminfo结果中看到它为总列。dalvik 内存处理除了位图之外的所有内容,这些位图分配在本机内存中(对于 Honeycomb 之前的 Android 版本是这样)。
话虽如此,我只能回答你的一些问题:
据我所知,Android 总是会为 Bitmaps 分配内存,即使它们是相同的。因此,在您的情况下,每个活动都会为您的背景分配内存。
我不知道使用主题是否更好,您必须尝试一下。
一方面,当设备有足够的内存来处理下一个活动时,活动不会被回收。当您按下后退按钮时,每个活动都会被推到一堆,从那里恢复。如果 Android 需要更多内存,它会从释放内存的堆中删除一个活动(回到第一个问题,也许这就是不共享内存的原因)。另一方面,您可以设置活动启动模式来改变这种行为(看看这里)。
我认为 MAT 不显示本机内存数据。使用 dumpsys meminfo 的本机列来查看您为位图分配了多少内存。
我自己也很难处理 OutOfMemory 问题。现在我对它的工作原理有了更清晰的了解,并且我能够处理大文件而不会耗尽内存。我强烈推荐这两个对我有很大帮助的资源: