美文网首页
Activity启动模式

Activity启动模式

作者: pkxutao | 来源:发表于2017-11-29 15:25 被阅读10次

    Activity启动模式

    singlTop 栈顶复用模式

    如果该模式的Activity位于栈顶,则启动该Activity不会重新创建,相应的onCreat、onStart不会被调用,onNewIntent被调用
    

    singleTask 栈内复用模式

    这是一种单实例模式。只要Activity在一个栈中存在,那么多次启动Activity都不会重新创建实例,onNewIntent会被调用
    

    Activity的Flags

    FLAG_ACTIVITY_NEW_TASK

    这个标记的作用是为Activity指定“singleTask”启动模式
    

    FLAG_ACTIVITY_SINGLE_TOP

    这个标记的作用是为Activity指定“singleTop”启动模式
    

    FLAG_ACTIVITY_CLEAR_TOP

    当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈
    

    实践

    在工作时,经常需要做一个“回到首页”功能,即点击一个按钮回到最初始的界面(MainActivity)。
    这个功能可以通过两个flag完成:FLAG_ACTIVITY_NEW_TASK && FLAG_ACTIVITY_CLEAR_TOP。例如:一个任务栈中有ABCD四个Activity,现在需要回到A,BCD出栈,
    如果现在只设置了FLAG_ACTIVITY_NEW_TASK,则任务栈变成BCDA,
    如果只设置FLAG_ACTIVITY_CLEAR_TOP,任务栈会变成ABCDA,所以两者缺一不可
    

    任务栈

    参数:TaskAffinity

    这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需的任务栈的名字为应用的包名。我们可以为每个Activity都单独指定TaskAffinity,TaskAffinity主要和singleTask启动模式或者allowTaskRepatenting属性配对使用,在其他情况下没有意义。
    

    分类

    分为前台任务栈和后台任务栈,后台任务栈中的Activity位于暂停状态,用户可以通过切换将后台任务栈再次调到前台,例如:所有属性默认情况下,启动一个APP,桌面Activity所在的任务栈变成后台任务栈,APP的Activity所在的任务栈变成前台任务栈
    

    使用方法

        Intent intent = new Intent();
        intent.setClass(context, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        context.startActivity(intent);
    

    或者

            <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait" >
    

    setFlags和addFlags区别

    其实从方法名字上就可以区分,setFlags会替换之前的flag,addFlags是在原来基础上添加flag,来看源码:

    public Intent setFlags(int flags) {
        mFlags = flags;
        return this;
    }
     public Intent addFlags(int flags) {
        mFlags |= flags;
        return this;
    }
    

    参考资料来自《Android开发艺术探索》

    相关文章

      网友评论

          本文标题:Activity启动模式

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