2011-03-24 105 views
5

我现在正在处理内存泄漏。所以我很好奇,如果有任何方法来手动销毁视图(在活动onDestroy方法)? 由于父子引用,上下文引用,标签等原因,整个布局(activity contentView)有点复杂。销毁视图(布局)

GC现在无法收集我的布局。而且问题隐藏在视图结构中......所以唯一能找到它的方法是尝试销毁叶片视图,以便GC在某个时候收集根视图并让我知道问题所在。

我的布局结构:ViewFlipper(RelativeLayout的,ListView控件(ViewFlipper(RelativeLayout的,RelativeLayout的)))

+1

请停止在标题中写标签。 – 2011-06-14 22:46:58

回答

10

您可以从ViewGroup中删除视图,但无法手动销毁视图。如果你得到内存泄漏,通常是因为你在视图外部持有对你的Context的长期引用。

  1. 不要存放任何具有静态字段上下文(即绘图资源 - 位图是罚款)
  2. 删除所有的处理程序,清除所有定时器
  3. 不要守住线程/ AsyncTasks上下文,或者如果你确定他们是弱引用的。

视图包含与其他视图有关的信息(即另一视图的上下文)是好的,因为所有视图都被销毁 - 这很可能是因为上下文被某些东西持有(并且上下文有对大多数事情的处理 - 即所有的视图),你无法释放内存。

1

你有没有在你浏览任何处理器/信息,你可能需要停下来?

我有一个类似的问题,我在一个动画中定期发送消息。我需要停止/忽略这些消息,并在触发活动OnDestroy()后再停止排队。

+1

是的,我意识到你的问题是强迫观点自由,但我不知道这是否可能。至少,我从来没有见过任何暴露的内存管理调用。我希望有。 – CatalystNZ 2011-03-28 22:59:01