android - 正确使用上下文

标签 android memory-leaks reference android-context

我在应用程序中经常使用Context,而且我听说它经常导致内存泄漏和其他问题,所以我有几个相关的问题。

最好使用什么Context:我是否应该始终使用getApplicationContext(),或者如果可能的话,使用Activity(如使用getActivity) Fragment 中的 ()Activity 中的 this 或通常出现的 Context 对象如果我在广播接收器内部,来自构造函数或诸如onReceive()之类的方法的参数?

如何释放Context相关对象?当我不再需要它时,只需将 null 分配给保存对 Context 对象的引用的变量?

如果我使用一些 Context 来实例化 ToastProgressDialogTextView 或其他对象会怎么样?我是否也应该释放对这些对象的引用以避免内存泄漏?

Context 对象保留在全局变量中是一个好习惯吗?因为我经常在内部类或方法中需要它。

我希望得到一些明确的澄清、解释、相关主题的链接。

最佳答案

不同的上下文有不同的能力(例如,只有Activity上下文才能启动另一个Activity)。

查看有关如何使用上下文的精彩文章:http://www.doubleencore.com/2013/06/context/

例如,常见的陷阱之一是在 AsyncTask 上使用 Activity 上下文。这里的主要问题是,当 AsyncTask 仍在工作时, Activity 可能会完成(并且上下文会被破坏)。如果它尝试使用上下文进行任何操作,它将失败。在这种情况下,最好使用构造函数(或任何其他方法)中接收的上下文来检索应用程序上下文。

关于android - 正确使用上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24342747/

相关文章:

出现键盘时Android工具栏向上移动

java - 在android中解析json数组中的JSON数组

java - 弱引用 : reference is destroyed within "seconds"

angularjs - 如何使用 angularjs-nvd3-directives 避免内存泄漏

c++ - 为什么不总是在 C++ 中通过 const 引用传递?

android - ContentResolver 在 API 级别 18 上抛出 FileNotFoundException

android - Firebase Firestore : Cannot call useEmulator() after instance has already been initialized

Node.js + Redis 内存泄漏。难道我做错了什么?

reference - 当我用引用而不是拥有的值调用std::mem::drop时会发生什么?

c# - 防止字典中的对象修改