Android Activity启动模式之singleTop实例详解

时间:2022-02-22 23:40:20

本文实例讲述了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)发布程序,查看日志

Android Activity启动模式之singleTop实例详解

无论点击多少次按钮,都不会有新的日志打印出来。原因是当前栈顶活动为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中,日志显示如下:

Android Activity启动模式之singleTop实例详解

第一个日志是初次进入mainactivity打印的,点击按钮进入myactivity1,打印了第二个日志。当点击myactivity1中的按钮时,此时栈顶活动是myactivity1,所以当点击按钮时,会创建一个新的mainactivity实例。

此时,点击back退到myactivity1,再次点击退到mainactivity,再次点击则退出程序。

希望本文所述对大家android程序设计有所帮助。