我有一个具有静态变量的类,该变量可容纳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
}