美文网首页
关于StartActivityForResult/Activit

关于StartActivityForResult/Activit

作者: DrunkPian0 | 来源:发表于2017-11-15 21:40 被阅读36次

    0x00 零碎的点

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


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

    0x01 关于启动模式

    Activity启动模式设置:

        <activity android:name=".MainActivity" android:launchMode="standard" />
    

    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/Activit

          本文链接:https://www.haomeiwen.com/subject/kozhvxtx.html