现在,当类包含静态 Context
对象时,Android Studio 会显示警告。它说这会导致内存泄漏。然而,我注意到这也是在 android 库中完成的。例如,LocalBroacastManager
类有一个静态实例,并且包含一个 context
对象。
那么内存泄漏有多严重?
我有一个在后台运行的单例地理围栏类,并将一个 boolean 值
保存到sharedPreferences
,指示用户是否在地理围栏中。为了保存首选项,我需要一个 context
对象,但由于该方法是重写方法,因此我无法传入上下文对象。
如果没有 context
实例变量,如何实现这一点?
最佳答案
这是你能遇到的最糟糕的情况。假设您有一个 Activity ,并将其存储为静态上下文。除非您在 Activity 完成时将其清空,否则您现在已经泄漏了整个 Activity。这意味着 Activity 保存的每个变量都会被泄漏,包括整个 View 层次结构。它基本上阻止了该上下文中的任何内容释放。
最好的做法是不要存储 Context,而是将其作为参数传递给需要它的函数。如果必须存储 Context,请不要将其设为静态。只要 Activity 完成后框架中没有任何内容继续保留对该对象的引用,非静态变量就不会泄漏它。
如果您绝对必须使用静态上下文,请将其设为应用程序上下文。该信息在您的应用程序的整个运行过程中都有效,因此不会真正泄露。
关于java - 静态上下文警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773631/