您的位置:首页 > 其它

Intent startActivityForResult 启动 与 Activity启动模式

2016-03-11 14:53 519 查看
话不多说,上代码。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: