美文网首页
Activity 启动方式

Activity 启动方式

作者: 黑色扶手带 | 来源:发表于2018-05-16 20:50 被阅读15次

    一、四种启动方式

    Standard

    默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

    SingleTop

    可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

    SingleTask

    只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
    如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

    SingleInstance

    只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

    二、使用方法

    在清单文件中设置

    android:launchMode="singleTop"
    

    在Intent中添加Flag指定启动模式,比如在Service启动Activity时需要用到这种方式

            Intent intent = new Intent();
            intent.setClass(context, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
    

    注意动态设置要比静态设置优先级要高
    Flag的对应关系

    Flag 清单文件 属性说明
    FLAG_ACTIVITY_NEW_TASK SingleTask 作用是为Activity指定 “”启动模式。跟在AndroidMainfest.xml指定效果同样
    FLAG_ACTIVITY_SINGLE_TOP SingleTop 作用是为Activity指定 “”启动模式,跟在AndroidMainfest.xml指定效果同样。
    FLAG_ACTIVITY_CLEAN_TOP SingleTask 具有此标记位的Activity,启动时会将与该Activity在同一任务栈的其他Activity出栈。一般与SingleTask启动模式一起出现。它会完毕SingleTask的作用。但事实上SingleTask启动模式默认具有此标记位的作用
    FLAG_ACTIVITY_NO_HISTORY 使用该模式的Activity在启动其他Activity后变会自动销毁
    FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS android:excludeFromRecents="trure" 具有此标记位的Activity不会出如今历史Activity的列表中,使用场景:当某些情况下我们不希望用户通过历史列表回到Activity时,此标记位便体现了它的效果

    三、应用场景

    SingleTask

    最常见的应用场景就是保持我们应用开启后仅仅有一个Activity的实例。最典型的样例就是应用中展示的主页(Home页)。

    假设用户在主页跳转到其他页面,运行多次操作后想返回到主页,假设不使用SingleTask模式,在点击返回的过程中会多次看到主页,这明显就是设计不合理了

    SingleTop

    假设你在当前的Activity中又要启动同类型的Activity,此时建议将此类型Activity的启动模式指定为SingleTop,能够降低Activity的创建,节省内存!

    //使用SingleTop页面传值可以使用这种方法。
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);//设置新的intent
            init();//初始化动作
        }
    

    四、参考

    Activity启动模式与任务栈(Task)全面深入记录(上)
    Activity启动模式与任务栈(Task)全面深入记录(下)

    相关文章

      网友评论

          本文标题:Activity 启动方式

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