Activity 4种启动模式launchMode

来源:互联网 发布:新闻资讯网站php源码 编辑:程序博客网 时间:2024/06/16 09:52

Activity的启动模式
* Activity task stack:任务栈
* 栈
* 连续的内存空间
* 后进先出
* 标准模式:默认就是标准模式
* singleTop:如果Activity的实例不在栈顶,那么就会创建,如果已经在栈顶了,就不会再创建了
* singleTask:如果Activity没有被创建任何实例,那么启动时会创建,如果已经创建了一个实例,那么启动时是返回至该Activity而不会再创建该Activity
* 保证栈中永远只有一个该Activity的实例
* singleInstance:在一个单独的任务栈中创建该Activity的实例,然后再也不会创建第二个实例了,以后的每次启动该Activity,都是把该Activity所在的栈显示至前台
* 保证整个系统的内存都只有一个该Activity的实例
Activity的四种启动模式

每个应用会有一个Activity任务栈,存放已启动的Activity

Activity的启动模式,修改任务栈的排列情况

  • standard 标准启动模式
  • singleTop 单一顶部模式
    • 如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
    • 应用场景:浏览器的书签
  • singeTask 单一任务栈,在当前任务栈里面只能有一个实例存在

    • 当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在
    • 应用场景:浏览器的activity
    • 如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码
  • singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在

    • 如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
    • 应用场景: 电话拨打界面
public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click1(View v){        Intent intent = new Intent(this, MainActivity.class);        startActivity(intent);    }    public void click2(View v){        Intent intent = new Intent(this, SecondActivity.class);        startActivity(intent);    }}
public class SecondActivity extends Activity {     @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_second);        }     public void click1(View v){            Intent intent = new Intent(this, MainActivity.class);            startActivity(intent);        }        public void click2(View v){            Intent intent = new Intent(this, SecondActivity.class);            startActivity(intent);        }}

参考:Android Activity

原创粉丝点击