Activity和Context有什么区别?

And*_*oid 86 android android-context android-activity

活动和上下文是一样的,还是存在差异?

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

Raf*_*l T 109

据我所知: Context是基础对象.因此, 与Application相同的每个Activity都来自Context.这意味着每个Activity和每个Application都是一个Context;

来自Application 活动

java.lang.Object
  ? android.content.Context
      ? android.content.ContextWrapper
          ? android.view.ContextThemeWrapper
              ? android.app.Activity
Run Code Online (Sandbox Code Playgroud)

应用

java.lang.Object
?   android.content.Context
   ?    android.content.ContextWrapper
       ?    android.app.Application
Run Code Online (Sandbox Code Playgroud)

只要您的应用程序处于活动状态,应用程序上下文就会持续,而活动上下文会因您的活动而死亡(在Context该活动之后无效).

因此,如果您需要跨活动的Context(即在Singleton中),您将更好地使用Application上下文.

通常在需要上下文的Android Framework方法中,您传递的方法没有区别.但是如果要保持对上下文的长寿命引用,请始终注意MemoryLeaks

  • 如果我引用面向对象的语言是完全正确的:Java中的每个Object都派生自Object.class,因此在FACT中,一​​切都是Object.更具体一点:Acivity是Context的专业化.如果我有一个抽象类动物和两个来自动物(猫,狗)的类,这两个至少是动物.在任何地方都需要动物才能传递猫或狗,因为它与上下文相同!请在向我投票之前确认信息 (13认同)
  • 是的,对不起,我已经检查了链接,确实Context是Activity的超类.无论如何,说Activity是一个Context是不完全正确的,Activity是一个更复杂的对象,而Context只是一个包含信息并允许访问资源的块. (2认同)

zap*_*tec 8

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

Activity类从"ContextThemeWrapper"扩展而来,这个来自"ContextWrapper",而来自"Context".

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