欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-20 18:33:52
本文实例讲述了android activity启动模式之singletop。分享给大家供大家参考,具体如下: 在前面文章《android activity启动模式之sta...

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

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

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

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

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

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

更多关于android activity相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结

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

上一篇:

下一篇: