美文网首页
activity的启动模式

activity的启动模式

作者: lovefo | 来源:发表于2019-06-20 21:05 被阅读0次

    1.为什么要定义启动模式?

    1.为了实现一些默认启动模式(standard)之外的需求
    2.让某个activity启动一个全新的task(而不是被别人放在当前的task)
    3.让activity启动时只是调出已有的某个实例(而不是在back stack顶创建一个新的实例)
    4.在用户离开task时只保留根activity,而back stack中的其他的activity都要清空

    2.定义启动模式的二种方法

    1.使用manifest文件

    在 manifest 文件中activity声明时,利用 activity 元素的 launchMode 属性来设定 activity 与 task 的关系

    <activity
                ......
                android:launchMode="standard"
                 >
               .......
            </activity>
    

    2.使用Intent标志

    在要启动 activity 时,你可以在传给 startActivity() 的 intent 中包含相应标志,以修改 activity 与 task 的默认关系。

    Intent i = new Intent(this,NewActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
    

    注意: 你用 launchMode 属性为 activity 设置的模式可以被启动 activity 的 intent 标志所覆盖。

    3.有哪些启动模式?

    "standard" (默认模式) 
      当通过这种模式来启动Activity时, Android总会为目标 Activity创建一个新的实例,并将该Activity添加到当前Task栈中。这种方式不会启动新的Task,只是将新的 Activity添加到原有的Task中。

    "singleTop" 
      该模式和standard模式基本一致,但有一点不同:当将要被启动的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是直接复用Task栈顶的Activity。

    "singleTask"
      Activity在同一个Task内只有一个实例。如果将要启动的Activity不存在,那么系统将会创建该实例,并将其加入Task栈顶; 
      如果将要启动的Activity已存在,且存在栈顶,直接复用Task栈顶的Activity。 
      如果Activity存在但是没有位于栈顶,那么此时系统会把位于该Activity上面的所有其他Activity全部移出Task,从而使得该目标Activity位于栈顶。

    "singleInstance" 
      无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例且会用一个全新的Task栈来装载该Activity实例(全局单例).

    如果将要启动的Activity不存在,那么系统将会先创建一个全新的Task,再创建目标Activity实例并将该Activity实例放入此全新的Task中。

    如果将要启动的Activity已存在,那么无论它位于哪个应用程序,哪个Task中;系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来。

    4.设置全屏模式

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    // 去除标题栏
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    

    相关文章

      网友评论

          本文标题:activity的启动模式

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