【问题标题】:What is the difference between Activity and Context?Activity 和 Context 有什么区别?
【发布时间】:2011-06-29 09:10:54
【问题描述】:

Activity和Context是一样的,还是有区别的?

我应该什么时候让一个方法传递一个 Activity,什么时候传递一个 Context?

【问题讨论】:

  • @Egor Thnx 伙计,我会好好照顾它的.. 在问问题之前.. 你能帮我再问一个问题吗.. android 中所有活动的根源是什么
  • 请检查下面的讨论以清除问题
  • 太糟糕了,这些答案都不是很完整。这是谷歌搜索时弹出的第一个项目。

标签: android android-activity android-context


【解决方案1】:

据我了解: Context 是基础对象。所以每个ActivityApplication 相同都来自上下文。这意味着每个 Activity 和每个 Application 都是 Context

来自developer.android.comActivity

java.lang.Object
  ↳ android.content.Context
      ↳ android.content.ContextWrapper
          ↳ android.view.ContextThemeWrapper
              ↳ android.app.Activity

还有Application

java.lang.Object
↳   android.content.Context
   ↳    android.content.ContextWrapper
       ↳    android.app.Application

只要您的应用程序还活着,应用程序上下文就会持续存在,而 Activity 上下文会随着您的 Activity 而消失(在该 Activity 的onDestroy 之后无效)。

因此,如果您需要跨活动的上下文(即在单例中),最好使用应用程序上下文。

通常在需要上下文的 Android 框架方法上,传递哪一个没有区别。但是,如果您要保持对上下文的长期引用,请始终注意MemoryLeaks

【讨论】:

  • 是的,对不起,我检查了链接,确实 Context 是 Activity 的超类。无论如何,说 Activity 是一个 Context 并不完全正确,Activity 是一个更复杂的对象,而 Context 只是一个保存信息并提供资源访问权限的块。
  • @Rafael T Thnx 给出正确答案
  • 如果我提到面向对象的语言是完全正确的:Java 中的每个对象都派生自 Object.class,所以事实上一切都是对象。更具体地说:活动是上下文的专业化。如果我有一个抽象类动物和两个派生自动物(猫、狗)的类,那么这两个至少是动物。在任何需要动物的地方,您都可以通过 Cats 或 Dogs,因为 Context 也是如此!在你给我投票之前请确认信息
  • “只要您的应用程序处于活动状态,Activity 上下文就会持续存在,而 Activity 上下文会随着您的 Activity 而消亡” 似乎已关闭。第一个不应该是 Application 上下文吗?
【解决方案2】:

正如你在Android doc 上看到的那样:

Activity 类从“ContextThemeWrapper”扩展而来,这个从“ContextWrapper”扩展而来,而从“Context”扩展而来。

所以,是的,一个 Activity 扩展了上下文!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 2021-09-11
    • 2023-03-18
    • 2018-04-29
    相关资源
    最近更新 更多