Intent startActivityForResult 启动 与 Activity启动模式
2016-03-11 14:53
519 查看
话不多说,上代码。
有两个Activity,启动模式都是默认的标准模式。
在MainActivity的onCreate 方法中直接启动 FristActivity,
在onStop中打印Log 证明已经跳转,使得MainActivity处于不可见状态,
在onActivityResult中打印Log证明能执行到该方法。
在FirstActivity的onCreate 方法中打印Log 证明已经成功启动,
在onDestroy 中打印Log 证明已经返回数据。
下面看看[b]launchMode=”standard”的结果[/b]
可以看到 已经获取到正确的数据了。
下面我们只需要对AndroidManifest 文件中的launchMode 进行更改就好了。
将MainActivity的launchMode 依singleTop、singleTask、singleInstance的顺序进行变更,得到下面的图:
launchMode=”singleTop”
launchMode=”singleTask”
launchMode=”singleInstance”
从上面可以看出MainActivity的launchMode 设置为 standard、singleTop、singleTask都可以得到FirstActivity 的数据,singleInstance 得不到数据。
singleTop: 当要启动的Activity 位于栈顶的时候,不再创建Activity 的实例,直接复用该实例,否则创建新的实例压入栈中。
singleTask: 当要启动的Activity 位于栈中的时候,不再创建Activity 的实例,把位于该Activity 实例之上的所有Activity 实例进行出栈操作,否则创建新的实例压入栈中。
singleInstance : 使用singleInstance 模式的Activity 会被另外分配一个栈。
从上面可以看出standard、singleTop、singleTask 模式下的MainActivity 和standard 模式下的FirstActivity 处于同一个栈内,所以能获得到数据。并且standard、singleTop 不会销毁位于其上的Activity 的实例,所以不论MainActivity 和 FirstActivity 使用standard、singleTop如何搭配都不会出问题,如下图:
MainActivity 和 FirstActivity 使用singleTop、singleTask 搭配要小心,如下图:
MainActivity 和 FirstActivity 中至少有一个的启动模式设置为 singleInstance 就不能正确获取数据(应该说 就获取不到数据 更准确一些),
AndroidManifest 中如下图:
有两个Activity,启动模式都是默认的标准模式。
MainActivity 中如下图:
在MainActivity的onCreate 方法中直接启动 FristActivity,
在onStop中打印Log 证明已经跳转,使得MainActivity处于不可见状态,
在onActivityResult中打印Log证明能执行到该方法。
FirstActivity中如下图:
在FirstActivity的onCreate 方法中打印Log 证明已经成功启动,
在onDestroy 中打印Log 证明已经返回数据。
下面看看[b]launchMode=”standard”的结果[/b]
可以看到 已经获取到正确的数据了。
下面我们只需要对AndroidManifest 文件中的launchMode 进行更改就好了。
将MainActivity的launchMode 依singleTop、singleTask、singleInstance的顺序进行变更,得到下面的图:
launchMode=”singleTop”
launchMode=”singleTask”
launchMode=”singleInstance”
从上面可以看出MainActivity的launchMode 设置为 standard、singleTop、singleTask都可以得到FirstActivity 的数据,singleInstance 得不到数据。
为什么singleInstance 得不到数据?
standard:standard是Activity 默认的启动模式,在不进行显式指定的情况下,所有Activity 都会 自动使用这种启动模式,每启动一个Activity 都会去创建一个Activity 的实例压入栈中。singleTop: 当要启动的Activity 位于栈顶的时候,不再创建Activity 的实例,直接复用该实例,否则创建新的实例压入栈中。
singleTask: 当要启动的Activity 位于栈中的时候,不再创建Activity 的实例,把位于该Activity 实例之上的所有Activity 实例进行出栈操作,否则创建新的实例压入栈中。
singleInstance : 使用singleInstance 模式的Activity 会被另外分配一个栈。
从上面可以看出standard、singleTop、singleTask 模式下的MainActivity 和standard 模式下的FirstActivity 处于同一个栈内,所以能获得到数据。并且standard、singleTop 不会销毁位于其上的Activity 的实例,所以不论MainActivity 和 FirstActivity 使用standard、singleTop如何搭配都不会出问题,如下图:
MainActivity 和 FirstActivity 使用singleTop、singleTask 搭配要小心,如下图:
MainActivity 和 FirstActivity 中至少有一个的启动模式设置为 singleInstance 就不能正确获取数据(应该说 就获取不到数据 更准确一些),
才疏学浅,如有不对,欢迎指正!!!
email:704084109@qq.com
相关文章推荐
- 网络通信框架Volley使用详细说明
- CSS网页布局模型
- python logging 随记
- BluetoothDemo蓝牙
- Oracle 动态sql小例子
- [转]ORACLE EXECUTE IMMEDIATE 小结
- [转]Java web 开发 获取用户ip
- SQLServer2008 使用sql语句访问excel数据
- Oracle 循环调用存储过程
- JavaScript 判断手机端操作系统(Andorid/IOS)
- Oracle 当输入参数允许为空时
- Oracle 生成数据字典
- Android中ListView设置点击颜色改变的想法
- JVM垃圾回收算法
- FPM打包工具
- 一个Windows系统到底有多复杂
- 用python,100行完成producer与consumer模型
- 程序语言之灵魂续二
- 调查表与调查结果分析
- 快排