0

我不明白我的应用程序中发生了什么。我的应用程序结构:

EventListActivity (List of events)
 EventDetailActivity (Detail of selected event and button to open list of persons)
  EventPersonsListActiviy (List of persons who connected to the event
   EventPersonDetialActivity  (Detail of selected person)

当我启动应用程序时,我得到了这个 meminfo:

               native   dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5257     6620      N/A    11877      N/A       28      661

在我穿过树之后,当我在 EventPersonDetialActivity 中时,我得到了这个

               native  dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5690     6740      N/A    12430      N/A       149      661

但是当我再次打开菜单中的 EventListActivity 时。但是在开始活动之前,我关闭了所有最​​新的活动(我有一个 HistoryManager,其中包含一个列表,当我打开一个活动时,我将其放入列表中,在重新开始主要活动之前,我调用了 finish() 方法来活动和之后清除列表。)并且在 onDestroy 的所有活动中,将所有变量设置为 null 并调用 System.gc()。但我得到了这个:

               native  dalvik    other  total      limit     bitmap  nativeBitmap
allocated:     5663    7193      N/A    12856      N/A       135      661

为什么第三种情况的总内存使用量比第一种情况大?而内存中只有EventListActivity?如果我经常回复这个方法,我终于内存不足:(

4

2 回答 2

0

这样做可以弄清楚:

  1. 转到您的 EventListActivity 几次并检查内存使用情况,直到它爬升(但在它崩溃之前)。
  2. 进行堆转储
  3. 使用 jhat 检查堆转储
  4. 查看所有类的所有实例(系统除外)
  5. 在列表的顶部,您应该看到每个活动和其他相关类的实例数。这应该可以帮助您确定哪些对象没有被正确释放。
  6. 找出哪些对象正在引用您认为应该由 GC 收集的对象(通过“引用此对象的对象”的链接)
于 2012-06-18T16:16:02.533 回答
0

不要全部 System.gc() 手动,它严重隐藏了 dalvik VM 的性能。让 Android 完成它的工作。

您是否在多个地方保留对活动之间共享的任何对象的引用?

于 2012-06-18T15:43:50.117 回答