了解上下文和上下文处理程序的内存泄漏



我有一个具有静态变量的类,该变量可容纳Context参考。

public static Context context;

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

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

也与ContextWrapper类的类似情况。

我的理解是,如果我们对与Context相关的类的引用将导致内存泄漏。但是,为什么Android Studio对非静态Context参考不给任何警告?

我看到了一些代码示例,其中它们扩展了ContextWrapper类。每当需要Context时,他们都会通过扩展的" ContextWrapper"的类访问。此方法不会导致内存泄漏?

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

任何人都可以为此提供解释吗?

预先感谢。

首先,让我们知道内存泄漏以及为什么它发生的完全

记忆泄漏如果内存中有任何数据无法垃圾收集的数据,则说明,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
}

泄漏是根据可变范围和内存中大小的范围计算的,高内存和更大的范围具有更大的泄漏机会,例如上下文,位图等

最新更新