使用Android的getBaseContext,getApplicationContext或使用Activity的"this"的不同规则

Rok*_*Rok 42 android android-context

我GOOGLE了这个问题很多,已经发现,当使用许多不同的建议getBaseContext,getApplicationContext或活动本身的这个指针.

经常出现并且似乎很有意义的三条规则是 -

  1. 对于上下文活动的长期引用, 只要您的应用程序存在,就应该使用getApplicationContext
  2. 对于生命周期与其活动相关的上下文,应使用自己的活动上下文(this)
  3. 静态存储上下文指针只是非常谨慎(如果可能的话,根本不存在)

假设这些是正确的,getBaseContext有什么用?

我见过许多使用以下方法创建新意图的例子 -

Intent intent = new Intent(getBaseContext(), myClass.class);
Run Code Online (Sandbox Code Playgroud)

与 - 相反 -

Intent intent = new Intent(this, myClass.class);
Run Code Online (Sandbox Code Playgroud)

哪个是正确的或推荐的方法,为什么?

Kar*_*ran 13

getBaseContext()是ContextWrapper的方法.ContextWrapper是"代理Context的实现,它简单地将所有调用委托给另一个Context.可以子类化来修改行为而不改变原始Context." (根据javadocs)

因此,这用于将调用委托给另一个上下文.

  • @JAL因为您必须使用您的活动的类名来限定'this',例如`MyActivity.this`.getBaseContext为你工作,因为你的嵌套类没有这样的方法,所以它自动解析为你的活动的类. (6认同)
  • 您可能已经在那里回答了我的问题,但是,只是为了澄清,这是创建新Intent的更好/推荐的方法.你能举出什么时候使用getBaseContext的例子吗? (4认同)