Activity 启动模式

2018-04-01  本文已影响0人  吃茶泡饭丶

应用场景

standard:普通activity

singleTop:适合接收通知启动的内容显示页面

比如一下子收到一堆推送消息,不能每个都弹出来吧。但凡是这样的都行。优酷的推荐视频,电商app推送一个活动。

singleTask:程序入口等启动页面

最常见的应用场景就是保持我们应用开启后仅仅有一个Activity的实例。最典型的样例就是应用中展示的主页面(Fragment的containerActivity)、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面。

singleInstance:完全独立的

系统Launcher、锁屏键、来电显示等系统应用;
singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题。

问题:举例 A -> B(singleInstance) ->C
情形 1:在 C 界面返回,会直接返回到 A,继续在 A 界面返回(退出) 会 出现 B(singleInstance) 界面。

情形 2:打开 C 界面 ,HOME 键应用推到后台再次返回应用,在 C 界面返回到 A,继续在 A 界面返回(退出),B被系统杀死不会再出现(设置taskAffinity属性除外)。

singleInstance用于中间页面的情形被面试官问到了,思路没错,回来试了下确实是这样无意中发现了情形 2的情况需要进一步验证原因,这里暂且不议。

LaunchMode与startActivityForResult() 的一些使用问题

在 5.0 之前 可能会遇到这种情况:

startActivityForResult方法启动一个Activity,然后在onActivityResult()方法中可以接收到上个页面的回传值,但你有可能遇到过拿不到返回值的情况。

原因:在还没有开始界面跳转本身的onActivityResult被马上被执行了

官方注解标示:
Android认为不同的Task之间对这种要求返回结果的启动方式会产生一些依赖(对Task),所以干脆简单粗暴在跳转前直接返回RESULT_CANCELED结果。

关系如下:

LaunchMode与startActivityForResult()

所以要注意5.0之前对启动模式的使用
5.0之后没有这类问题。

上一篇下一篇

猜你喜欢

热点阅读