activity的启动模式

2019-06-20  本文已影响0人  lovefo

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);
上一篇下一篇

猜你喜欢

热点阅读