Activity 启动模式

来源:互联网 发布:淘宝搜索热词排名 编辑:程序博客网 时间:2024/06/05 18:19

Android Activity 启动模式分为4中:standard、singleTop、singleTask、singleInstance。在清单配置文件AndroidManifest.xml中设置activity标签中的android:launchMode可以选择启动的模式。
1.standard
默认启动模式。如果没有指定启动模式,系统会自动选择这种模式。这种模式的特点就是每次启动都会创建该活动的一个新的实例。
创建一个名为launchmode的工程。在StandardActivity的oncreate函数中加入以下代码

        Log.i("info", this.toString());        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                Intent intent = new Intent(MainActivity.this,                        MainActivity.class);                startActivity(intent);            }        });

启动项目 点击按钮查看logcat的输出信息。
这里写图片描述
每点击一次按钮,程序就会创建一个新的实例。要点击3次退出按钮才能退出程序。
2.singleTop
在这种模式下就很好的处理第一种模式的资源浪费。只要该活动在活动栈的栈顶,它是不会重新创建的。当活动不处于栈顶时,才会重新创建。
新建活动SingleTopActivity和OtherActivity。在清单配置文件中设置启动模式为singleTop。在SingleTopActivity添加2个按钮,一个按钮用于启动自己,另一个启动其他活动。具体代码如下:

Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                Log.i("info", SingleTopActivity.this.toString());                Intent intent = new Intent(SingleTopActivity.this,                        SingleTopActivity.class);                startActivity(intent);            }        });        Button button1 = (Button) findViewById(R.id.button1);        button1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                Log.i("info", SingleTopActivity.this.toString());                Intent intent = new Intent(SingleTopActivity.this,                        OtherActivity.class);                startActivity(intent);            }        });

启动程序 运行结果如下:
这里写图片描述
可以看出多次点击启动自己的时候,如果该活动在栈的顶部。该活动是不会重新创建的。
3.singleTask
既然singleTop已经处理好了重复创建的问题,为什么还要有singleTask的启动模式呢。singleTop是有条件,如果该活动不在栈顶还是会重新创建活动。为什么在一个程序中不直接启用一个活动,不管它在栈的那个位置。显示这是可行的,用singleTask就能实现这个效果。
创建SingleTaskActivity活动,设置启动模式为signletask。运行程序,查看结果:
这里写图片描述
这里SingleTaskActivity和OtherActivity就是一个明显的对比。不管启动多少次。SingleTaskActivity都只创建了一次,但是OtherActivity就不一样创建了多次。
4.singleInstance
singleInstance有点难理解。如果一个活动指定为singleInstance的时候,就会创建一个新的栈来保存这个活动。
先看实例。新建3个活动FirstActivity.SecondActivity.ThirdActivity.每个活动都设置一个按钮。活动一启动活动二。活动二启动活动三。活动三启动活动一。活动二设置为singleInstance模式。打印出他们的栈的id。结果如下:
这里写图片描述
可以看到不管怎么启动。活动二的栈id都和一、三不同。已经是说活动二在另外一个任务栈中。假如你现在要清理某个栈,但是其中有一个Activity是不能被清理,就可以使用这种模式。
本文的例子在http://download.csdn.net/detail/u014523456/9554696。
个人理解能力有限,本文如有错误,或者需要修改的地方,请留言。

0 0
原创粉丝点击