Android Activity启动模式之singleTop实例详解
本文实例讲述了android activity启动模式之singletop。分享给大家供大家参考,具体如下:
在前面文章《android activity启动模式之standard实例详解》中,我们介绍了活动的默认启动模式standard,本文继续介绍activity的singletop模式。
singletop模式:当activity的活动模式设置为singletop时,在启动活动时首先检查栈顶活动是否是该活动,如果是,在使用当前实例,否则继续创建新的实例。
(1)修改androidmanifest.xml
修改该配置文件,设置mainactivity的启动模式为singletop,如下:
<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
布局文件如下:
<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方法
@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方法
@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 activity相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
Android Activity启动模式之singleTop实例详解
-
Android Activity启动模式之singleTask实例详解
-
Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)
-
Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)
-
详解Activity之singletast启动模式及如何使用intent传值
-
Android 两种启动模式的实例详解
-
详解Activity之singletast启动模式及如何使用intent传值
-
Android 两种启动模式的实例详解
-
android开发实例(activity生命周期和启动模式、IPC机制)
-
Android四大组件之Activity启动流程源码实现详解(一)