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

Activity四种启动模式

作者: 苏墨白梦觉泪满青衫湿 | 来源:发表于2019-02-19 11:42 被阅读0次

    standard(标准默认的模式)

    standard模式是默认的启动模式,每次startActivity都是创建一个新的activity的实例, 适用于绝大大数情况。

    1.在不指定启动模式的前提下,系统默认使用该模式启动Activity
    2.每次启动一个Activity都会重复创建一个新的实例
    3.Activity它的onCreat(),onStart(),onResume方法每次被启动时都会被调用

    使用问题:
    重复快速启动相同的Activity它会重复创建相同的实例,知道back返回时才会从任务栈中移除一个实例。

    解决方案:
    1.做防止快速点击操作来避免重复创建
    2.singletop 这个可以用来避免多次创建

    singleTop(栈顶的)

    单一顶部,如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例, 而是调用 onNewIntent() 方法。

    1.当前栈中已有该Activity的实例并且该实例位于栈顶时
    2.当前栈中已有该Activity的实例但是该实例不在栈顶时
    3.当前栈中不存在该Activity的实例时

    应用场景
    IM对话框
    新闻客户端推送

    standard和singleTop都是原来的任务栈中新建一个Activity实例,不会开启一个新的任务栈

    singleTask(栈的复用)

    1.首先会根据taskAffinity去寻找当前是否存在一个对应名字的任务栈
    2.如果不存在,则会创建一个新的Task
    3.如果存在,则得到该任务栈,查找该任务栈中是否存在该Activity实例

    应用场景:
    应用的主界面,整个任务栈只有一个实例,节约内存和cpu的目的。

    singleInstance()

    单一实例,整个手机操作系统里面只有一个实例存在。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。与singleTask不同的是singleInstance会新建一个任务栈,这个任务栈只有这么一个实例,而singleTask不会创建新的任务栈。

    1.以SingleInstance模式启动的Activity具有全局唯一性
    2.如果在启动这样的Activity时,已经存在了一个实例,会把存在的实例调度到前台进行复用
    3.以singleInstance模式启动的Activity具有独占性
    应用场景:
    呼叫来电
    非常确定app中只有一个Activity可以供其他应用调用

    相关文章

      网友评论

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

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