我有一个具有静态变量的类,该变量包含Context
引用。
public static Context context;
Android工作室发出警告说静态引用 上下文类导致内存泄漏
如果我删除static
关键字,则不会发出任何警告。
同样具有ContextWrapper
类的情况。
我的理解是,如果我们对与Context
相关的类的引用会导致内存泄漏。但是,为什么Android工作室不会对非静态Context
引用发出任何警告?
我见过一些代码示例,他们扩展了ContextWrapper
类。每当他们需要Context
时,他们就会通过扩展了`ContextWrapper'的类访问。 这种方法会不会导致内存泄漏?
此外,运行时非静态Context
引用是否会发生内存泄漏?我是否以错误的方式理解它?我在这里错过了什么吗?
有人能解释一下吗?
提前致谢。
答案 0 :(得分:1)
首先,让我们了解内存泄漏及其恰好发生的原因
如果内存中有任何数据无法进行垃圾回收,就会发生内存泄漏。话虽如此,static
个变量无法进行垃圾回收,因为它们在整个应用程序中保留在内存中生活中non-static
变量可以被垃圾收集,一旦它的封闭父级不再被引用,请记住这一点,我们将看到示例来解释您的问题。
考虑具有静态和非静态变量的A类
Class A{
private static Context iCanNeverBeDestroyed;
// Scope -> Application life, so memory leak can occur
private Context iCanBeDestroyedWithA;
// Scope -> A
private static int itWontMatterWhetherImDestroyedOrNot;
//Even though the scope is Application, due to low memory usage , memory leak is negligible in this case
}
泄漏是根据内存中变量和大小的范围计算的,高内存和更大范围有更大的泄漏机会,例如Context,Bitmap等