在进行不同的活动并启动结果时,我别无选择,只能使用意图.现在,意图需要上下文,这对我来说毫无意义.我知道上下文允许访问应用程序资源,但是
当意图只是一个简单的Messenger时,为什么需要了解应用程序资源?
另外,我不确定为什么有人用getApplicationContext()创建意图,而另一些人将其用于活动上下文吗?
最后,我不确定在没有为上下文而是为应用程序上下文传递“ this”时,调用startActivityResult()的活动如何收到对onActivityResult()方法的回调.我认为您必须使用“ this”或传入名为startActivityResult()的当前活动上下文才能接收回调.那只是Java吧?如果您传入一个类,则另一个活动类将具有对该类的引用,因此允许它调用您类中的方法onActivityForResult().但是,事实并非如此,我想念的是什么?
解决方法:
意图本身不需要上下文.构造函数Intent#Intent(Context,Class)只是一个便捷构造函数,它在内部使用提供的参数派生ComponentName. ComponentName依次只是您的应用程序的包名和要定位的类名.因此,ComponentName可能类似于:
com.foo.bar/com.foo.bar.ui.activity.MyActivity
但是,您也可以只使用一个空的构造函数Intent#Intent()并自己提供ComponentName(Intent#setComponentName(ComponentName)).
因此,无论您提供应用程序的上下文还是活动的上下文都没关系(后者更容易键入).还请记住,需要应用程序上下文的类可以自己调用Context#getApplicationContext,因此您无需担心.
关于startActivityForResult()-Android内部管理您的Activity记录的堆栈.因此,它将结果传递到堆栈上的上一个活动.单击“返回”时,它知道返回的位置相同.
请注意,这并不意味着它将维护您的Activity实例堆栈.这些实例可能早已消失-销毁并收集垃圾以释放内存.但是,堆栈包含允许重新创建它们并恢复其状态的信息.
标签:java,android
来源: https://codeday.me/bug/20191026/1936706.html