为什么意图需要上下文?

Wow*_*zer 4 java android

在处理不同的活动并开始它们以获得结果时,我别无选择,只能使用意图。现在意图需要上下文,这对我来说毫无意义。我知道上下文允许访问应用程序资源但是

当意图只是一个简单的信使时,为什么您需要了解应用程序资源?

另外,我不太确定为什么有些人getApplicationContext()用它来创建意图,而其他人将其用于活动上下文????

最后,当我没有传递上下文的“this”而是应用程序上下文时,我不太确定startActivityResult()调用该方法的活动如何接收回调onActivityResult()。我认为您必须使用“this”或传入当前调用的活动上下文startActivityResult()才能接收回调。那只是直接的java对吧?如果您传入一个类,则另一个活动类将引用您的类,因此允许它调用类中的方法,即onActivityForResult()。然而,事实并非如此,所以我错过了什么?

Mar*_*nak 6

Intent本身不需要Context. 构造函数Intent#Intent(Context, Class)只是一个方便的构造函数,它在内部使用提供的参数来派生ComponentName. ComponentName反过来只是您的应用程序的包名和要定位的类名。所以ComponentName可能是这样的:

com.foo.bar/com.foo.bar.ui.activity.MyActivity
Run Code Online (Sandbox Code Playgroud)

但是,您也可以只使用一个空的构造函数Intent#Intent()并提供您ComponentName自己的 ( Intent#setComponentName(ComponentName))。

因此,提供应用程序或活动的上下文无关紧要(后者键入起来更简单)。还要记住,需要应用程序上下文的类可以调用Context#getApplicationContext自己,所以这不是您需要担心的。

关于startActivityForResult()- Android 在内部管理您的活动记录堆栈。因此,它将结果传递给堆栈上的前一个 Activity。当您单击“返回”时,这与它知道返回何处的方式相同。

请注意,这并不意味着它维护了一堆您的 Activity 实例。这些实例可能早已不复存在——销毁并收集垃圾以释放内存。然而,堆栈包含允许重新创建它们和恢复它们状态的信息。