Android学习笔记之----Activity(二)LaunchMode

参考文章:基础总结篇之二 Activity的四种launchMode

其实上面的博客已经写得很好了,但是就singleTask和singleInstance,如果自己没有动手测试过的话还是不能充分的活用的;下面就Activity的4大启动模式我个人有点不不成熟的总结让大家品品  (^_^);

第一种: standard (标准模式)

老实说,我做项目到现在几乎用不上这种模式, 他就好比是会克隆(别钻牛角尖,克隆虽然连DNA都一样,但是出生时间就不一样)的一个模式,可以自己启动自己,两个Activity大致一样,除了序列号等信息; 四种模式只有 standard 能有在任务栈中生成一个与自己很像的一个兄弟;

startActivity(new Intent(MainActivity.this, MainActivity.class));

上面这句代码在 standard 模式中运行会重新生成一个Activity;而在其他3种模式中运行,则只会重新调用 onPause 和onResume方法而已,序列号也不会改变;

总结: 调用startActivity(new Intent(MainActivity.this, MainActivity.class));后能重新生成实例的模式就是standard(标准模式).

 

第二种:singleTop (栈顶模式)

据我个人测试发现, 这种模式一句话描述就是不能重新生成自己的standard(标准模式); 也许我调查得不够深吧.我反复测试过,除standard(标准模式)外,其余3种模式调用 startActivity(new Intent(MainActivity.this, MainActivity.class)); 时都只是调用了自身的 onPause 和 onResume 2个生命周期方法;所以我才给出以上的结论.

总结: 调用startActivity(new Intent(MainActivity.this, MainActivity.class));后不能重新生成自己.

第三种:singleTask (单任务模式) 

这个是今天的重头戏, singleTask (单任务模式) ,还记得看过的博客优雅的退出所有Activity吗, 只要把这个模式弄懂那就是很easy的一件事; 

Intent intent = new Intent(this, MainActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

startActivity(intent);

重中之重: 两点:

1,将目标 Activity 设置为 singleTask 模式;

2 跳转时加上这句代码,intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

这样一来除当前Activity以外的Activity都被finish掉了;

总结:能够清除掉同Task栈内其他所有Activity的启动模式.

第四种:singleInstance (单例模式)

这种模式我个人做了个情景设想: 我们把小明家看成是一个Task栈,小强家看成是另一个Task栈;好了,现在小明家是singleInstance 单例模式; 情景是:

1, 当小明去小强家玩的时候, 不管多晚, 小明最终会回到自己家.

2, 当小强来小明家玩的时候, 不管多晚, 小强最终会回到自己家.

3, 当小强来小明家邀请小明到小强家玩, 不管多晚, 小明最终会回到自己家.

具体的说就是,

1,不管是不是单例模式, 只要是发起 startActivity 的 Task 栈, 最终都会回到自己的栈依次返回.(比如:从A跳转到B,再跳转到单例模式C,但是C没有执行跳转,而是直接返回到了B, 那么这个时候,当B返回时,到了A,当A返回时,程序就退出了,而不会跳转到C)

2,单例模式的特性是,不管单例模式是不是最初启动的那个Activity,只要是该单例模式发起的startActivity,那么,当其他Task栈finish后,最后会回到单例模式所在的Task栈, 也就是上述第3种情景.

总结: 当单例模式发起 startActivity 后(不管重复多少次,只要最后一次是单例模式发起的跳转), 退出时,会先逐次finish掉其他Task栈内的所有Activity, 然后再返回单例模式所在的Task栈.(TaskId 可以区分)

好了,很抽象, 哈哈, 自己多测试下, 然后才能深刻理解, 实践出真知啊!
DEMO传送门: https://download.csdn.net/download/u012137924/13081442

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值