0x00 零碎的点
-
onActivityResult什么时候回调?
在onRestart之前。值得注意的是,如果在onActivityResult里跳转到其他Fragment,那onResume里的东西就不会执行了。
- 如果不startActivityForResult是不是也会回调?回调几次?
不会,只有startActivityForResult才会有回调。只回调一次。如果不setResult,那么ResultInfo中resultCode是0,intent是null。 - 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