活动和上下文有什么区别?


91

活动和上下文是否相同,还是存在差异?

我什么时候应该让一个方法传递一个活动,何时一个上下文?


@Egor Thnx先生,请问我会照顾好..在问问题之前..你能再帮我一个问题.. android中所有活动的根源是什么
Android

请检查下面的讨论以清除问题
Egor

太糟糕了,这些答案都不是很完整。这是为Google搜索弹出的第一项。
SMBiggs

Answers:


118

据我了解: 上下文是基础对象。因此,每个 与Application相同的Activity都来自Context。这意味着每个活动和每个IS都是一个;ApplicationContext

来自developer.android.com 活动

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

应用

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

只要您的应用程序处于活动状态,Application上下文就会持续存在,而Activity上下文随您的Activity一起消失(在onDestroy该Activity 之后无效)。

因此,如果您需要跨活动的上下文(即在Singleton中),那么使用Application上下文会更好。

通常在需要上下文的Android Framework方法上,传递的内容没有区别。但是,如果要保留对上下文的长期引用,请始终注意MemoryLeaks


2
是的,很抱歉,我已经检查了链接,实际上Context是Activity的超类。无论如何,说Activity是一个Context是不完全正确的,Activity是一个更复杂的对象,而Context只是一个保存信息并提供对资源的访问的块。
Egor

@Rafael T Thnx给出了正确答案
Android

17
如果我指的是面向对象的语言,那是完全正确的:Java中的每个对象都源自Object.class,因此在FACT中,一​​切都是对象。更具体而言:活动性是上下文的一种特殊化。如果我有一个抽象类动物和两个从动物(猫,狗)派生的类,那么这两个至少是动物。在需要动物的任何地方,您都可以通过猫或狗,因为上下文也是如此!请确认你的信息我downvote前
拉斐尔牛逼

1
“活动上下文将持续存在,只要您的应用程序还活着,而活动上下文将随您的活动消失”。首先不应该是应用程序上下文吗?
FirstOne '18年

8

如您在Android文档上所见:

Activity类是从“ ContextThemeWrapper”扩展而来的,这一类是从“ ContextWrapper”扩展而来的,而另一类是“ Context”的扩展。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.