2012-08-09 88 views
2

这是我熟悉的,即按返回键会导致活动获得“破坏”,或当开发者调用函数完成(),或当系统需要内存等..Activity.onDestroy幕后真正的破坏是什么意思?

并且也很熟悉我们需要在onDestroy中执行清理过程,如unBindDrawables(请参阅example),以避免OutOfMemory异常。

我的问题是:

被删除

不活动的破坏意味着参考活动对象?即活动对象是否可用于GC?如果是这样,为什么我们需要显式删除对活动相关视图的引用?

考虑例如:

如果对象具有参照对象只提到,那么如果我们废了的参考有没有必要明确设置B的参考为空,两者都将进行GC编辑...

我的intuitio ñ告诉我,活动的情况是这样的...请告诉我我的错误在哪里。

谢谢!

回答

1

确实activity的破坏意味着对activity对象的引用被删除了吗?即活动对象是否可用于GC?

是的,只要Android放弃了这项活动。如果您从静态上下文中直接或间接引用它,它将不会被垃圾收集。

如果是这样,为什么我们需要显式删除对活动相关视图的引用?

您不需要“显式删除对活动相关视图的引用”。

+0

在此先感谢CommonsWare,我很满意第一个问题。 – sevteen 2012-08-09 21:05:32

+0

但关于第二...为什么然后“unbindDrawables”解决OutOfMemory错误?或者,也许我误解了unbindDrawables的含义? – sevteen 2012-08-09 21:11:00

+0

@dioholic:该博客文章中没有任何内容是绝对必要的,尽管部分内容(尤其是背景内容)在某些情况下可能很有用。请参阅http://stackoverflow.com/a/7045044/115145。 – CommonsWare 2012-08-09 22:46:31

0

当您按下后退按钮时,您的应用程序不会被销毁,但暂停并且SO调用onPause()方法。 它可以被销毁,如果SO检测到,例如,低内存条件,然后它破坏并将调用onDestroy方法。 在这种方法中,您必须清理线程(如果您启动它们)或不再需要的所有内容,并导致资源消耗。 如果您熟悉Servlet,android中的onDestroy方法非常相似。 希望这可以帮到你