了解Context和ContextWrapper的内存泄漏

时间:2018-02-13 06:38:23

标签: android memory-leaks

我有一个具有静态变量的类,该变量包含Context引用。

  

public static Context context;

     

Android工作室发出警告说静态引用   上下文类导致内存泄漏

如果我删除static关键字,则不会发出任何警告。

同样具有ContextWrapper类的情况。

我的理解是,如果我们对与Context相关的类的引用会导致内存泄漏。但是,为什么Android工作室不会对非静态Context引用发出任何警告?

我见过一些代码示例,他们扩展了ContextWrapper类。每当他们需要Context时,他们就会通过扩展了`ContextWrapper'的类访问。 这种方法会不会导致内存泄漏?

此外,运行时非静态Context引用是否会发生内存泄漏?我是否以错误的方式理解它?我在这里错过了什么吗?

有人能解释一下吗?

提前致谢。

1 个答案:

答案 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等