从零开始学Android(六)

来源:互联网 发布:上海行知实验幼儿园 编辑:程序博客网 时间:2024/05/15 23:50

活动的启动模式

启动模式一共四种,分别是standard, singleTop, singleTask, singleInstance。可以通过在ActivityManifest.XML文件中的标签中的android:launchMode属性选择启动模式。

  1. standard
    这是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式,在这种模式下,每当启动一个新的活动,他都会在返回栈中入栈并处于栈顶位置。对于使用standard模式启动的活动,系统不在乎这个活动是否已经在返回栈中存在,每次启动都会创建一个新的实例。
    我们通过ActivityTest项目来对其进行测试:
    在FirstActivity的onCreate方法中修改代码:
    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.d("FirstActivity", this.toString());        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.first_layout);        Button button1 = (Button) findViewById(R.id.button_1);        button1.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(FirstActivity.this, FirstActivity.class);                startActivity(intent);            }        });    }

由打印信息可以看出,每点一次按钮就会创建一个新的FirstActivity实例,因此想要返回也需要点三次Back键。

  1. singleTop
    将启动模式指定为singleTop模式,则启动活动时如果发现返回栈的栈顶已经是该活动,则认为直接使用它而非创建新的活动实例。
    修改ActivityManifest.XML文件的FirstActivity启动模式:
        <activity            android:name=".FirstActivity"            android:label="This is FirstActivity"            android:launchMode="singleTop" >
  1. singleTask
    singleTask整个应用程序的上下文只有一个实例。
    每次启动活动的时候系统会在返回栈中检查是否存在该活动的实例,如果已经存在实例,则将直接使用该实例,并把在这个活动之上的所有活动出栈,如果没有发现就会创建一个新的实例。同样修改XML:
            android:name=".FirstActivity"            android:label="This is FirstActivity"            android:launchMode="singleTask" >

然后在FirstActivity中添加onRestart方法:

    @Override    protected void onRestart() {        super.onRestart();        Log.d("FirstActivity", "onRestart");    }

并在SecondActivity中添加onDestroy方法:

    @Override    protected void onDestroy() {        super.onDestroy();        Log.d("SecondActivity", "onDestroy");    }
  1. singleInstance
    不同于以上三种启动模式,singleInstance启动模式有一个单独的返回栈来管理这个活动。不管是哪个应用程序来访问这个活动,都有一个共同的返回栈,也就解决了共享活动实例的问题。、
0 0
原创粉丝点击