activity的启动模式

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值