activity的启动模式

来源:互联网 发布:易语言文本处理源码 编辑:程序博客网 时间:2024/06/05 09:21

Activity的启动模式

STANDARD

我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只有你创建了activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Actiivty则会在任务栈中销毁实例。

实例:
`protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    activityTV= (TextView) findViewById(R.id.tv_activity);    standardBtn= (Button) findViewById(R.id.btn_standard);    activityTV.setText(this.toString());    standardBtn.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent intent=new Intent(MainActivity.this ,MainActivity.class);            startActivity(intent);        }    });}`

其中的MainActivity就是标准启动模式,每次启动一次MainActivity都会去创建一个新的MainActivity

SingleTop模式

这种模式会考虑当前要激活的Activity实例在任务栈中是否处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。

分两种情况来看:第一种是A Activity启动A Activity:
`protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_b);

    textView= (TextView) findViewById(R.id.tv_activity);    button= (Button) findViewById(R.id.btn);    button1= (Button) findViewById(R.id.btn_1);    textView.setText(this.toString());    Log.e("wj",this.toString());    button.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            Intent intent = new Intent(BAct.this, BAct.class);            startActivity(intent);        }    });`

会发现如果A Activity位于栈顶,那么从A Activity启动A Activity的时候不会去创建新的A Activity 。会直接使用位于栈顶的Activity

第二种情况,A Activity的启动模式是SingleTop ,Activity的启动顺序是A–>B—>A,这时候发现B启动的A Activity是一个新的A Activity,并不是栈中存在的第一个A Activity,栈中存在的Activity一次是ABA。

因此,SingleTop启动模式当且仅当当且Activity在栈顶的时候,启动当且的Activity不会去重新实例化此Activity,如果要启动的Activity不在栈顶,那么跟Standard启动模式没有区别。

SingleTask模式

如果任务栈中存在该模式的Actiivty实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的onNewIntent()方法重用该Activity,使该Activity处于栈顶位置,否则就重新创建一个新的Activity实例。

注意此处重新启动已有的Activity的时候并不会调用该Activity的onCreate()方法,直接调用onNewIntent()方法

SingleInstance模式

当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的onNewIntent()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶,此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。

0 0