在我见过的各种 Android 代码中:
public class MyActivity extends Activity { public void method() { mContext = this; // since Activity extends Context mContext = getApplicationContext(); mContext = getBaseContext(); } }
但是,我找不到任何合适的解释来说明哪个更可取,以及在什么情况下应该使用哪个。
非常感谢有关这方面的文档的指针,以及有关如果选择了错误的文档可能会导致什么问题的指导,我们将不胜感激。
我同意 Android 中有关上下文的文档很少,但您可以将来自各种来源的一些事实拼凑起来。
官方 Google Android 开发者博客上的这篇博文主要是为了帮助解决内存泄漏问题,但也提供了一些关于上下文的有用信息:
在一个普通的Android应用中,你通常有两种Context,Activity和Application。
进一步阅读这篇文章会了解两者之间的区别,以及何时您可能想要考虑使用应用程序 Context( Activity.getApplicationContext()) 而不是使用 Activity 上下文this)。基本上,应用程序上下文与应用程序相关联,并且在应用程序的整个生命周期中始终是相同的,因为活动上下文与活动相关联,并且可能会被多次销毁,因为活动在屏幕方向更改期间被销毁,并且这样的。
Activity.getApplicationContext()
this
除了 Dianne Hackborn 的帖子外,我找不到任何关于何时使用 getBaseContext() 的信息,Dianne Hackborn 是从事 Android SDK 工作的 Google 工程师之一:
不要使用 getBaseContext(),只需使用您拥有的 Context。
那是来自android-developers 新闻组的帖子,您可能也想考虑在那里提出您的问题,因为少数在 Android 上工作的人实际监控该新闻组并回答问题。
所以总的来说,尽可能使用全局应用程序上下文似乎更可取。