【发布时间】:2014-10-31 15:43:31
【问题描述】:
我正在尝试实现一个 Android 库。在教程中,我找到了以下文本,但我不明白为什么当我有一个非静态内部类时,我无法引用 App 或 Activity 上下文?
谁能给我解释一下?
另一个常见的技巧是避免在非静态内部类中引用上下文 当您无法控制其生命周期时的活动。使用静态内部类和弱 而是对活动的引用。
【问题讨论】:
-
您可以引用应用程序上下文,但在您无法控制应用程序生命周期的情况下,最好避免使用它。当您无法控制应用程序生命周期时,对应用程序上下文的引用可能会更改,并且您对应用程序上下文的引用将不会更新。因此,当您使用弱引用时,该引用将在 GC 之后被删除,并且您知道必须获取一个新引用。
-
@Lubo 谢谢。但是我们的 GC 和“弱引用”我不知道。
-
GC 表示垃圾收集。在 java 中,它会自动调用,或者如果您调用 System.gc()。它将搜索内存中不再引用的对象,然后将其删除。所以它释放内存用于其他目的。如果通过强引用(Object o = new Object(); 那么“o”是对对象的引用)引用了对象,则 GC 不会清除该对象,因为您有对它的引用。但是如果你使用弱引用(引用存储在 WeakReference 类中),那么 GC 将删除该对象。
标签: java android android-context