Android startActivityForResult与launchMode

以前开发的时候一直犯的错误,今天通过一些调研记录下来。

       假定由AActivity来startActivityForResult到BActivity。

       1.一般我们都会在BActivity设置setResult返回AActivity,所以我们可能会想当然的觉得,就因为我们setResult了,所以,才得以跳转到AActivity,今天写了个例子,如果BActivity没有setResult,而是直接finish,照样会进入AActivity,当然,是在AActivity的launchMode不为singleInstance,BActivity不为singleTask或singleInstance的前提下

        2.如果AActivity的launchMode为singleInstance,BActivity的launchMode为singleTask或singleInstance的情况下,AActivity startActivityForResult以后,会直接调用AActivity 的onActivityResult,为什么会这样呢,跟launchMode有关,可以去网上找找singleInstance和singleTask的区别,他们都是在activity栈中只存在一份实例,但是区别就是singleInstance一条实例独霸整个activity栈,startActivityForResult是在当前栈中寻找目标Activity的,如果目标Activity不在本Acitivity栈中,就会出现startActivityForResult后直接进入onActivityResult。随便举几个例子,如果AActivity startActivityForResult,而BActivity的launchMode是singleTask或者是singleInstance,此时BActivity就在一个新的activity栈中,AActivity在startActivityForResult以后在本activity栈中找不到BActivity,此时就会直接进入AActivity的onActivityResult,如果BActivity的launchMode为stardand呢?BActivity就会与AActivity在同一个activity栈中,流程就会是AActivity.startActivityForResult->BActivity->AActivity.onActivityResult。其他情况举一反三。

猜你喜欢

转载自drakedog.iteye.com/blog/1972979