Android中怎么切换task到前台

[背景]
当一个业务流程涉及到多个task之间的交互,如一个Task_A中的Activity_1 startActivityForResult() 了一个Activity_2, Activity_2启动另一个Task_B并且期望利用Task_B运行的结果setResult()返回给Activity_1。
TaskRecord如下图所示:
Android中怎么切换task到前台。
[问题]
Task_B取得result之后,需要 把Task_A带到前台(active) ,这样Activity_1才能响应(onActivityResult)到Activity_2返回(setResult)的结果。
现在的问题就在于,Task_B并不一定能够退出(Activity_3其可能其他程序,如browser等),从而把Task_A带到前台;又或者Task_A和Task_B中又夹杂了其他的Task(你知道,长按home键你可以做得出来),以至于调用Task_B.moveTaskToBack()也不能解决问题。

[解决方案]
如果 你的平台是面向Android3.0(API level 11),那么恭喜你,一个函数就可以搞定:
moveTaskToFront 
Android中怎么切换task到前台。

 
如果你和我一样苦逼的在用2.2的平台,那么就要稍微麻烦点了,基本上是用 taskAffinity +FLAG_ACTIVITY_NEW_TASK  FLAG_ACTIVITY_SINGLE_TOP
先来看一下sdk怎么说的:
Android中怎么切换task到前台。
SDK说,如果用带FLAG_ACTIVITY_NEW_TASK标志来启动一个activity,并且这个activity与当前运行的另一个task(A)的affinity名字相同,那么就这个activity就会在那个task(A)里启动。
Ok,到这还不行,人家没说会把Task_A带到前台,接着看另一个Flag
 
Android中怎么切换task到前台。
好了,重点来了:如果Task_A中已经有了Activity_2,这时候如果以FLAG_ACTIVITY_NEW_TASK来start Activity_2,那么这个Task_A就会被 带到前台
好了,现在Task_A已经可以到前台了,剩下最后一步:Activity_2不能创建两次,这就要求同时使用下面这个flag:
 
3. FLAG_ACTIVITY_SINGLE_TOP
Android中怎么切换task到前台。
如果Activity_2在Task的顶端,那么这个Activity_2就不会被再此创建,而是走onNewIntent.
 
至此,结合上面3个特性,问题得以解决。结合代码,流程如下:
1. 在androdiManifest.xml中添加Activity_2的taskAffinity name与Task_A相同(也就是与Activity_1的taskAffinity名字相同),如android:taskAffinity = "android.task.calendar"。
2. 在Task_B启动前,Activity_1先启动Activity_2并要求返回结果,startActivityForResult().
3. Task_B中的Activity_4取得所需数据后,保存好(intent,或其他方法),然后startActivity(Activity_2),并带上(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP)标志。
4. Task_A被带到前台,并且调用到Activity_2::onNewIntent().
5. Activity_2取得之前保存的信息(从Intent或其他地方),调用setResult(),然后finish().
6. Activity_1中的onActivityResult()响应,得到返回结果。
 
总结下:
Android中怎么切换task到前台。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值