android - 设置或不设置实例变量为null?

时间:2015-02-10 10:47:59

标签: android memory android-activity ondestroy

我在以下网站上阅读了一篇文章

[http://developer.android.com/training/basics/activity-lifecycle/starting.html]

在该部分中,"将活动摧毁"

"大多数应用程序不需要实现此方法,因为本地类引用随活动一起销毁,并且您的活动应在onPause()和onStop()期间执行大多数清理。但是,如果您的活动包括您在onCreate()期间创建的后台线程或其他长时间运行的资源(如果未正确关闭可能会泄漏内存),则应在onDestroy()期间将其终止。"

  1. 我是否需要在onDestroy()?
  2. 期间将实例初始化为null
  3. 这是什么意思"长期运行的资源" ?例如,你的意思是imageview?
  4. 我是否需要在onDestroy()?
  5. 期间将全局变量初始化为null

    谢谢。

1 个答案:

答案 0 :(得分:0)

1. Does this instance is null during onDestroy()?

正在执行非静态方法的对象实例不能为null。也就是说,Activity实例(由this引用)不会为空。 Activity的该实例的字段可能为空,具体取决于它们是否已分配或未分配。

2. What does this mean "long-running resources" ? For example, you mean the imageview?

'长期运行的资源'指的是可能超过Activity生命周期的事物。这包括异步执行的任何ThreadAsyncTask,可能会超出Activity的存在。

这也可能意味着当你将Activity(或者保留对Activity的引用 - 像非静态内部类一样)传递给与生活无关的外部对象时 - Activity的循环。例如,如果您将Runnable发布到Handler并延迟较长,那么Runnable的引用会返回Activity(如匿名实例),应确保从onDestroy中的Runnable中删除Handler(或之前可能)。

3. Do I need to null the global during onDestroy()?

我不确定你在这里问的是什么。但是如果你指定一个'全局'或静态字段来引用Activity,这通常是一个坏主意,所以是的,将它指定为null(或完全删除它)。否则,您将使用该引用泄露Activity(GC将无法释放内存)。