美文网首页面试回家
Activity四种启动模式区别与适用场景、两种启动模式设置方式

Activity四种启动模式区别与适用场景、两种启动模式设置方式

作者: 浮世绘町 | 来源:发表于2020-07-23 12:29 被阅读0次

    管理方式

    • Activity的管理方式 = 任务栈
    • 任务栈 采用的结构 = “后进先出” 的栈结构
    • 每按一次Back键,就有一个 Activity出栈

    区别:


    微信图片_20200610170357.png

    启动模式的设置

    启动模式有2种设置方式:

    1.在 AndroidMainifest设置

    <activity android:name=".MainActivity"

    android:launchMode="singleTop">

    有四种模式

    standard

    默认启动模式,每次启动Activity,无论任务栈中是否已经有这个Activity的实例,系统都会创建一个新的Activity实例。

    适用场景:普通页面

    singleTop

    singleTop模式的Activity已经位于任务栈的栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。

    适用场景:通知、新闻(APP接收到多条推送消息,点开不同消息,均由同一实例展示。)

    singleTask

    SingleTask模式的Activity在同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,系统就会把该Activity移到栈顶,并把它上面的activity出栈。

    适用场景:主页,无论哪种业务场景下再次回到此页,都不应保留之上Activity。

    singleInstance

    和singleTask不同,singleTask只是任务栈内单例,系统里是可以有多个singleTask Activity实例的,而singleInstance Activity在整个系统里只有一个实例,启动一singleInstance的Activity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。

    适用场景:系统闹钟页面、来电显示、系统通讯录,不同APP调用此类Activity 时,首次创建实例,之后其他APP只能复用此实例。

    2.通过 Intent设置标志位

    Intent inten = new Intent (ActivityA.this,ActivityB.class);
    intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

    image.png

    二者设置的区别

    • 优先级不同 Intent设置方式的优先级 > Manifest设置方式,即以前者为准
    • 限定范围不同 Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP; Intent设置方式 无法设置单例模式( SingleInstance)

    相关文章

      网友评论

        本文标题:Activity四种启动模式区别与适用场景、两种启动模式设置方式

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