小编典典

获取 Android 上下文的各种方法有什么区别?

all

在我见过的各种 Android 代码中:

 public class MyActivity extends Activity {
    public void method() {
       mContext = this;    // since Activity extends Context
       mContext = getApplicationContext();
       mContext = getBaseContext();
    }
 }

但是,我找不到任何合适的解释来说明哪个更可取,以及在什么情况下应该使用哪个。

非常感谢有关这方面的文档的指针,以及有关如果选择了错误的文档可能会导致什么问题的指导,我们将不胜感激。


阅读 109

收藏
2022-03-22

共1个答案

小编典典

我同意 Android 中有关上下文的文档很少,但您可以将来自各种来源的一些事实拼凑起来。

官方 Google Android 开发者博客上的这篇博文主要是为了帮助解决内存泄漏问题,但也提供了一些关于上下文的有用信息:

在一个普通的Android应用中,你通常有两种Context,Activity和Application。

进一步阅读这篇文章会了解两者之间的区别,以及何时您可能想要考虑使用应用程序 Context(
Activity.getApplicationContext()) 而不是使用 Activity
上下文this)。基本上,应用程序上下文与应用程序相关联,并且在应用程序的整个生命周期中始终是相同的,因为活动上下文与活动相关联,并且可能会被多次销毁,因为活动在屏幕方向更改期间被销毁,并且这样的。

除了 Dianne Hackborn 的帖子外,我找不到任何关于何时使用 getBaseContext() 的信息,Dianne Hackborn 是从事
Android SDK 工作的 Google 工程师之一:

不要使用 getBaseContext(),只需使用您拥有的 Context。

那是来自android-developers 新闻组的帖子,您可能也想考虑在那里提出您的问题,因为少数在
Android 上工作的人实际监控该新闻组并回答问题。

所以总的来说,尽可能使用全局应用程序上下文似乎更可取。

2022-03-22