美文网首页
Activity的四种启动模式

Activity的四种启动模式

作者: psw123456 | 来源:发表于2019-05-29 11:51 被阅读0次

    为什么要用启动模式

    因为在我们平时的开发项目中,一般都需要在本应用中多个Activity之间进行跳转,也就是说如果我们需要跳转到某一个原来的Activity实例的时候,我们肯定更希望的是这个Activity的实例它是被常用的,而不是再去重新创建一个新的Actiyvity。

    可是Android的默认行为是当我们多次启动一个Activity的时候,系统它会创建多个Activity实例,然后把它按照创建的先后顺序放进任务栈当中,当我们按back键的时候,就会有一个Activity从任务栈的顶部移除,这样一直重复下去,直到我们的任务栈为空。

    当任务栈为空的时候,系统就会回收这整个任务栈,但是这样以来,系统多次启动同一个Activity的时候,他就会重复的创建多个同样的Activity实例,这样的做法肯定是不合适的,所以我们必须要有一个方式去优化它,好在Android系统给我们四种启动模式,来修改系统这一默认的行为。

    现在目前Activity的启动模式分为四种:

    standard(标准模式)

    singleTop(栈顶复用模式)

    singleTask(栈内复用模式)

    singleInstance(单实例模式)

    standard--标准模式

    standard标准模式

    standard是系统默认的启动模式,可以不去指定任何的属性系统开启Activity就是标准化的,在这种模式下你每去启动一个Activity都会创建一个Activity的新的实例,然后将它放到任务栈的顶部,你不用去考虑这个实例是否存在,因为每次它都会开启一个新的Activity,就算栈中有重复的Activity他都不会去关心,仍旧会创建新的Activity的实例放在栈的顶部。

    那么这种模式下谁启动了这种个模式的Activity,这个Activity就属于启动它的Activity任务栈当中,它的onCreate(),onStart(),onResume()方法每一次被启动的时候都会被依次调用。

    singleTop--栈顶模式

    singleTop栈顶复用

    使用SingleTop启动模式启动一个Activity的时候,

    当前栈中已有该Activity的实例并且该实例位于栈顶时,就不会去新建实例,而是去复用栈顶的那个Activity实例,并且会将Intent对象传入并回调onNewIntent()方法

    当前栈中已有该Activity的实例但是该实例不在栈顶的时候或者是当前栈中不存在该Activity实例的时候,这两种情况就和stadard的标准模式一样,依然会重新创建一个新的Activity实例

    应用场景:

    1.IM对话框  ---如果你频繁收到很多条IM信息,不可能每弹出一次就去创建一个Activity,这样的话对系统来说是一个很大的负担,这个时候我们就可以通过SingleTop模式来开启这个Activity

    2.新闻客户端推送 --- 如果你收到很多条新闻推送,每点一次那个push信息都会进入一个Activity,这个时候我们就可以通过SingleTop模式来复用这个Activity

    注:不管是standard启动模式还是singleTop启动模式都是在原来的栈中开启一个Activity实例,是不会去新建一个任务栈的

    SingleTask -- 栈内复用模式(也可以算做一种单例模式)

    SingleTask 栈内复用模式

    1.与SingleTop模式的区别

    SingleTop检测的是栈顶元素是 否有需要启动的Activity,而SingleTask检测的是整个栈中是否存在需要启动的Activity,

    如果存在就会直接将这个Activity放到栈顶,同时把这个Activity上面的Activity实例全部销毁,并回调onNewIntent()方法

    2.特点

    使用SingleTask启动模式启动一个Activity的时候,

    首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈(一般情况下这个名字就是包名)  taskAffinity--任务相关性

    如果不存在,则会创建一个新的Task,然后就会创建新的Activity实例加入到栈中

    如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity实例,存在的话就会将存在这个Activity实例的上方所有Activity实例都出栈,然后回调启动Activity实例的onNewIntent()方法,不存在的话就会新建这个Activity实例然后入栈

    3.应用场景---应用的主界面

    SingleInstance -- 单实例模式

    SingleInstance 单实例模式

    1.特点

    ·SingleInstance模式启动的Activity具有全局唯一性(什么是全局唯一性?就是说在整个的系统当中,只会存在一个这样的实例)

    ·如果在启动这样的Activity时,已经存在了一个实例,就会把这个Activity实例调到前台,然后复用这个实例

    ·以SingleInstance模式启动的Acivity具有独占性(什么是独占性?就是说它会独自占有一个Task任务栈,而被他开启的任何一个Activity都只能运行在其他的任务栈当中,而他的任务栈只能有它这一个实例)

    2.应用场景

    1.呼叫来电 --- 比如说在你的应用界面当中突然接了个电话,这时候他就会跳到MainActivity

    2.还有一种就是我们非常非常的确定,整个Activity只要有一个实例就可以完成相应的功能,这个时候就可以用SingleInstance模式,让别的应用也能打开这个SingleInstance模式下的Activity实例

    相关文章

      网友评论

          本文标题:Activity的四种启动模式

          本文链接:https://www.haomeiwen.com/subject/xebetctx.html