【问题标题】:Diffinitive rules for using Android's getBaseContext, getApplicationContext or using an Activity's "this"使用 Android 的 getBaseContext、getApplicationContext 或使用 Activity 的“this”的不同规则
【发布时间】:2011-03-28 11:13:09
【问题描述】:

我在谷歌上搜索了很多这个问题,并发现了许多关于何时使用 getBaseContextgetApplicationContext 或 Activity 自己的 this 的不同建议指针。

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

  1. 用于长期引用 上下文活动 应该使用 getApplicationContext 只要你的存在,它就存在 应用存在
  2. 对于生命周期为 他们的活动,他们自己的 活动上下文 (this) 应该是 用过
  3. 静态存储上下文指针 只有非常小心(并且,如果 可能,根本不可能)

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

我见过很多使用 -

创建新意图的示例
Intent intent = new Intent(getBaseContext(), myClass.class);

相对于 -

Intent intent = new Intent(this, myClass.class);

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

【问题讨论】:

    标签: android android-context


    【解决方案1】:

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

    所以这用于将调用委托给另一个上下文。

    【讨论】:

    • 您很可能已经回答了我的问题,但为了澄清,这是创建新 Intent 的更好/推荐方式。你能举出什么时候使用 getBaseContext 的例子吗?
    • 感谢您这么快回复我,Karan。那是我看过的页面之一。它提到“不要使用 getBaseContext - 只需使用您拥有的上下文”。显然我非常看重 Diane 的 cmets,但这并不能解释为什么在创建意图时经常使用 getBaseContext
    • AFAIK,getBaseContext 仅在调用 Activity onCreate 之前使用。它主要由 ActivityThread 使用。
    • @JAL 因为您必须使用活动的类名来限定“this”,例如MyActivity.this。 getBaseContext 对您有用,因为您的嵌套类没有这样的方法,因此它会自动解析为您的活动类。
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2014-01-09
    • 2012-05-07
    • 1970-01-01
    • 2018-07-09
    • 2020-10-08
    相关资源
    最近更新 更多