本文实例讲述了android activity启动模式之singletop。分享给大家供大家参考,具体如下:
在前面文章《android activity启动模式之standard实例详解》中,我们介绍了活动的默认启动模式standard,本文继续介绍activity的singletop模式。
singletop模式:当activity的活动模式设置为singletop时,在启动活动时首先检查栈顶活动是否是该活动,如果是,在使用当前实例,否则继续创建新的实例。
(1)修改androidmanifest.xml
修改该配置文件,设置mainactivity的启动模式为singletop,如下:
1
2
3
4
5
6
7
8
9
|
<activity
android:name= ".mainactivity"
android:label= "@string/app_name"
android:launchmode= "singletop" >
<intent-filter>
<action android:name= "android.intent.action.main" />
<category android:name= "android.intent.category.launcher" />
</intent-filter>
</activity>
|
设置活动的launchmode为singletop。
(2)发布程序,查看日志
无论点击多少次按钮,都不会有新的日志打印出来。原因是当前栈顶活动为mainactivity,启动模式是singletop,当发现栈顶为该活动时,就使用当前实例,不在新建实例。因为mainactivity只有一个实例,所以只需按一次back键就可退出当前活动。
如果当前栈顶活动部是mainactivity呢?结果又会是什么?做如下实验:
(1)新建一个活动myactivity1
布局文件如下:
1
2
3
4
5
6
7
8
9
10
|
<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"
android:orientation= "vertical" >
<button
android:id= "@+id/mybutton1"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:text= "myactivity1 button" />
</linearlayout>
|
把当前活动在androidmanifest.xml文件中进行注册(省略)。
(2)修改mainactivity.java的oncreate方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
@override
protected void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
//打印当前对象
log.d( "mainactivity" , this .tostring());
//去掉title
requestwindowfeature(window.feature_no_title);
setcontentview(r.layout.activity_main);
//获取button1
button button1 = (button) findviewbyid(r.id.button1);
//添加点击事件
button1.setonclicklistener( new onclicklistener() {
@override
public void onclick(view view) {
//为了测试singletop启动模式,当点击按钮时,启动myactivity1活动
intent intent = new intent(mainactivity. this ,myactivity1. class );
//启动活动
startactivity(intent);
}
});
}
|
即点击按钮时跳到myactivity1活动
(3)修改myactivity1的oncreate方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@override
protected void oncreate(bundle savedinstancestate) {
super .oncreate(savedinstancestate);
//打印当前对象
log.d( "myactivity1" , this .tostring());
requestwindowfeature(window.feature_no_title);
setcontentview(r.layout.activity1_my);
//获取按钮
button mybutton = (button)findviewbyid(r.id.mybutton1);
//点击事件
mybutton.setonclicklistener( new onclicklistener() {
@override
public void onclick(view arg0) {
//启动mainactivity活动
intent intent = new intent(myactivity1. this ,mainactivity. class );
startactivity(intent);
}
});
}
|
即点击按钮时跳到主活动mainactivity。
(4)发布程序,查看日志
在主活动mainactivity中点击按钮进入myactivity1中,然后点击按钮再次进入mainactivity中,日志显示如下:
第一个日志是初次进入mainactivity打印的,点击按钮进入myactivity1,打印了第二个日志。当点击myactivity1中的按钮时,此时栈顶活动是myactivity1,所以当点击按钮时,会创建一个新的mainactivity实例。
此时,点击back退到myactivity1,再次点击退到mainactivity,再次点击则退出程序。
希望本文所述对大家android程序设计有所帮助。