本文实例讲述了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程序设计有所帮助。