【问题标题】:android - to set or not to set instance variables to null?android - 设置或不设置实例变量为空?
【发布时间】:2015-02-10 10:47:58
【问题描述】:

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

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

在“破坏活动”部分中

“大多数应用程序不需要实现此方法,因为本地类引用会随 Activity 一起销毁,并且您的 Activity 应该在 onPause() 和 onStop() 期间执行大部分清理操作。但是,如果您的 Activity 包含您创建的后台线程在 onCreate() 或其他长时间运行的资源期间,如果没有正确关闭,可能会泄漏内存,你应该在 onDestroy() 期间杀死它们。"

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

谢谢。

【问题讨论】:

    标签: android memory android-activity ondestroy


    【解决方案1】:
    1. Does this instance is null during onDestroy()?
    

    执行非静态方法的对象实例不能为空。也就是说,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 的引用(如匿名实例),则应确保删除Runnable来自 onDestroy(或之前)中的Handler

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2010-10-24
      • 2014-02-25
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多