java - 静态上下文警告

标签 java android performance android-studio memory-leaks

现在,当类包含静态 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/

相关文章:

java - 将键盘事件从 java 发送到任何应用程序(屏幕键盘)

Java 注释不适用于 Callable

java - IdentityHashMap 和 WeakHashMap 的组合

c# - 如何快速搜索单词或数字 c#

java - 如何强制在 Java 1.5.0_14 JRE 而不是 JRE 1.7 中打开 JNLP 文件

java - 为什么扫描仪不工作

java - PhoneGap (2.4) 插件错误 : 'class not found'

android - 如何在运行时以编程方式使用 xml 中的维度设置文本大小?

javascript - face-api.js - 为什么浏览器的 faceapi.detectAllFaces() 比服务器的快?

python - 为什么 pandas read_csv 转换器的性能要慢得多并且是非矢量化的?