“同时”启动两个Activity
2016-02-23 14:22
253 查看
产品提出一个需求,需要从Activity1跳转到Activity3,但从Activity3返回时要返回到Activity2。
最初的实现方式是,从Activity3返回(调用finish())时,从Activity3启动Activity2。
这种方式不太好。首先,从显示上,用户会在Activity3消失后看到一段时间的Activity1,再看到Activity2。这是由于当启动Activity2需要时间长时,Activity3 finish()后,app先执行Activity1的onRestart、onStart、onResume、onPause,再执行Activity2的onCreate、onStart、onResume。这样会导致Activity3消失后,Activity1先恢复显示,再显示activity2。另外,从代码编写角度,activity3执行finish()的地方,都要写一份启动activity2的启动代码,代码维护性不好。
之后采用Activity1“同时”启动Activity2、Activity3的方式,实现了预期的效果。代码如下:
问题虽然解决,但我很好奇,这个过程中Activity栈的结构是如何变化的?
看到的现象是从Activity1打开Activity3,从Activity3返回时,看到的是Activity2;当从Activity2返回,看到的才是Activity1。好像栈的结构是1->2->3。
经过测试,实际上是Activity1先启动Activity3,从Activity3返回时时,会启动Activity2。具体的栈结果是1->3,然后变为1->2。
具体的测试结果:
一、Activity1启动
二、Activity1 启动Activity3
三、从Activity3返回 此时启动Activity2
四、从Activity2返回
测试源码: http://download.csdn.net/detail/zhxlxh/9440381
最初的实现方式是,从Activity3返回(调用finish())时,从Activity3启动Activity2。
这种方式不太好。首先,从显示上,用户会在Activity3消失后看到一段时间的Activity1,再看到Activity2。这是由于当启动Activity2需要时间长时,Activity3 finish()后,app先执行Activity1的onRestart、onStart、onResume、onPause,再执行Activity2的onCreate、onStart、onResume。这样会导致Activity3消失后,Activity1先恢复显示,再显示activity2。另外,从代码编写角度,activity3执行finish()的地方,都要写一份启动activity2的启动代码,代码维护性不好。
之后采用Activity1“同时”启动Activity2、Activity3的方式,实现了预期的效果。代码如下:
Intent intent = new Intent(this, MyActivity2.class); startActivity(intent); Intent intent2 = new Intent(this, MyActivity3.class); startActivity(intent2);
问题虽然解决,但我很好奇,这个过程中Activity栈的结构是如何变化的?
看到的现象是从Activity1打开Activity3,从Activity3返回时,看到的是Activity2;当从Activity2返回,看到的才是Activity1。好像栈的结构是1->2->3。
经过测试,实际上是Activity1先启动Activity3,从Activity3返回时时,会启动Activity2。具体的栈结果是1->3,然后变为1->2。
具体的测试结果:
一、Activity1启动
二、Activity1 启动Activity3
三、从Activity3返回 此时启动Activity2
四、从Activity2返回
测试源码: http://download.csdn.net/detail/zhxlxh/9440381
相关文章推荐
- Android的APK应用签名机制以及读取签名的方法
- JavaWeb实现用户登录的拦截
- Maven项目中log4j配置
- java之StringUtils
- 能发送http请求(get,post)的工具
- 《面向对象分析与设计》阅读笔记2
- 制作ubuntu安装u盘
- RemoteControl应用介绍
- 导航条 点击后 添加背景颜色
- 数据库事务
- armv7对应的CACHE操作相关文件解析
- 通过串口读写数据
- 酷炫的android dialog弹出框
- 缓存误区(下)
- UI整理-----part7--模态视图 push&pop
- 正则表达式验证中文
- errors
- jni 线程函数调用技巧-native thread exited without detaching
- Golang(Go语言)内置函数之append
- MySQL中select filed from table where field in (....)语句的排序问题