java single instance_Android 的Singleinstance 的home返回退出应用?

当Activity的launchMode被设置成singleInstance之后,整个手机操作系统里面只有一个该Activity实例存在,可以认为是Activity的单例模式,不同的应用去打开这个activity时共享的同一个activity。且在单独的Task里运行,Task也是唯一的,同时Activity不允许设置taskAffinity属性。

回到你的问题,当A启动singleInstance的B后,会为B单独创建一个Task(正常的Task是通过Activity的taskAffinity属性和singleTask或者FLAG_ACTIVITY_NEW_TASK标志来创建的),并在Task里显示B,这时候会把新Task切换到前台。现在内存里存在两个Task,我们姑且把它们称为TaskA[A]和TaskB[B],且TaskB显示在前端。

这时候如果在B界面上按返回按钮是因为TaskB在TaskA上面,关闭了TaskB所有的界面后自然会把上一个Task也就是TaskA显示在前端,也就是TaskA里的Activity界面A。

在B界面如果按Home键,回到桌面,接着点击应用的icon,按我的理解应该是直接唤起TaskA,所以显示的应该是A界面而不是B界面,不知道你是否搞错了,因为从桌面上点击icon启动Activity的时候会带上FLAG_ACTIVITY_NEW_TASK标志,该标志会检查是否存在和要启动的Activity的taskAffinity标识指定的Task,如果存在则直接唤起对应的Task,也就是TaskA。

如果按了Home键,回到桌面,接着通过任务管理器打开B界面,然后在B上按返回按钮,因为B界面存在一个当杜的TaskB中,按钮了返回按钮后,B界面从TaskB中移除,所以会回到桌面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值