时间:2018-01-08周二,上午9:30技术分享
分享主题:Activity 的启动模式
模式原因
Activity 的启动模式是为了解决多个可重复的 Activity 的展示问题。
一个 Activity 即是一个界面。对于一个界面来讲,它的展示方式分两种情况:要么不复用,比如 Standard ;要么复用它本身。
复用
复用的话,就涉及到如何复用。一个应用大于等于一个 Activity 的有序集合。既然有序,有的就在开头的位置,有的在末尾的位置,重要的是里面可能还会有重复。如果我们要针对这个集合,使用复用的思想的话,可以有两种思路:一种是把准备复用的 Activity 上面的移除,比如 SingleTask ;一种是准备复用的 Activity 上面不存在任何界面,比如 singleTop 。
SingleTask
对于第一种思路,有两个好处,一是节省创建 Activity 开支,二是因为只有一个实例,所以界面的数据会保持一致。缺点是,由于要销毁其上的 Activity 所以用户能看到明显的闪动,影响用户体验。
singleTop
对于第二种思路,比较常见的场景为,由于网络延迟或者其他cpu调用带来的用户展示界面的延时,而导致用户返回点击某一个按钮,开启新的 Activity 。在这种情况下,如果使用 singleTop 始终都只会创建一个 Activity 实例。
SingleInstance
到这,你可能认为,多 Activity 界面复用的问题,基本上就解决了。其实不然,为了复用,我们还可以达到新的高度。目前分析的三种情况,都是站在一个集合之内,那么如果多个 Activity 集合要共享一个界面的话,就需要开拓思路,寻求新的方法,比如 SingleInstance 。可以理解为一个应用,包含多个 Activity 的集合(栈),而其中会有一些集合比较特殊,设置为了SingleInstance 模式后,集合里只有这一个 Activity。
它的现实场景就是第三方 app 的界面调用,比如统一认证,其他 app 调用认证客户的登录界面,就可以采用 SingleInstance 这种跨 app 间的界面共享方式。对于其他app来讲,每次都不会产生新的实例。对于 app 内自身来讲,由于登录界面是单独的一个 Activity 栈,所以对于应用中的其他 Activity 界面展示顺序也不会造成混乱。
缺点就是切换会消耗资源,界面启动慢。