Android 四种加载方式详解(standard singleTop singleTask singleInstance)

来源:互联网 发布:java字符串拼接加空格 编辑:程序博客网 时间:2024/06/05 00:50

加载模式分类及在哪里配置

Activity有四种加载模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:

<activity android:name="ActivityB" android:launchMode="singleTask"></activity>

standard


首先说standard模式,也就是默认模式,不需要配置launchMode。先只写一个名为ActA的Activity:
[html] view plaincopyprint?
  1. package com.toc.testactivity;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    import org.w3c.dom.Text;

    /**
    * Created by yuanfei on 2015/8/12.
    */
    public class ActivityA extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.maina);
            Button btn = (Button) findViewById(R.id.btn);
            Log.i("Button","Button");
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent it = new Intent(ActivityA.this,ActivityA.class);
                    startActivity(it);
                }
            });
            TextView tv = (TextView) findViewById(R.id.tv);
            tv.setText(this+"");

        }
    }
其中当ActivityA跳转到ActivityA  点击按钮几次  每次都是新建ActivityA 每次都重新执行下里面的代码  
现在点Android设备的回退键,可以看到是按照刚才创建Activity实例的倒序依次出现,类似退栈的操作,而刚才操作跳转按钮的过程是压栈的操作。

singleTop

singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

还是用刚才的示例,只需将launchMode改为singleTop,就能看到区别。

运行的时候会发现,按多少遍按钮,都是相同的ActiA实例,因为该实例在栈顶,因此不会创建新的实例。如果回退,将退出应用。
singleTop模式,可用来解决栈顶多个重复相同的Activity的问题。如果是A Activity跳转到B Activity,再跳转到A Activity,行为就和standard一样了,会在B Activity跳转到A Activity的时候创建A Activity的新实例,因为当时的栈顶不是A Activity实例。

singleTask

singleTask模式和后面的singleInstance模式都是只创建一个实例的。

当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

把上面singleTop的实例中的ActA的launchMode改为singleTask,ActB的改为standard。那么会发现在ActA界面中按一次按钮: 

singleInstance

http://blog.csdn.net/tiancizhenai/article/details/7037787
0 0
原创粉丝点击