关于StartActivityForResult/Activity启动模式

0x00 零碎的点

  1. onActivityResult什么时候回调?
    在onRestart之前。值得注意的是,如果在onActivityResult里跳转到其他Fragment,那onResume里的东西就不会执行了。


    关于StartActivityForResult/Activity启动模式_第1张图片
    image.png
  1. 如果不startActivityForResult是不是也会回调?回调几次?
    不会,只有startActivityForResult才会有回调。只回调一次。如果不setResult,那么ResultInfo中resultCode是0,intent是null。
  2. requestcode的作用?
    我有时候想,难道不是每次启动一个Activity都必然会回到之前的一个Activity吗?那requestCode有什么用?事实上同一个Activity中有多个requestCode的时候会发挥作用。

0x01 关于启动模式

Activity启动模式设置:

    

Activity的四种启动模式:

1. standard

    默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

2. singleTop

    如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

3. singleTask

    如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 

4. singleInstance

    在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

0x03 关于Fragment使用ActivityForResult

1.在Fragment中使用startActivityForResult的时候,不要使用getActivity().startActivityForResult,而是应该直接使startActivityForResult()。

2.如果activity中重写了onActivityResult,那么activity中的onActivityResult一定要加上super.onActivityResult(requestCode, resultCode, data)。

如果违反了上面两种情况,那么onActivityResult只能够传递到activity中的,无法传递到Fragment中的。

--
ref:
http://blog.csdn.net/linghu_java/article/details/17266603
https://www.cnblogs.com/tangZH/archive/2016/10/04/5930491.html
http://blog.csdn.net/liuhe688/article/details/6733407

你可能感兴趣的:(关于StartActivityForResult/Activity启动模式)