作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,来帮助大家理解Activity的四大启动模式。

演示效果如下:

第一步:实验前准备,相关配置文件以及Activity的建立

(1)AndroidMainfest.xml配置文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.administrator.intentflags">
 4     <application
 5         android:allowBackup="true"
 6         android:icon="@mipmap/ic_launcher"
 7         android:label="@string/app_name"
 8         android:supportsRtl="true"
 9         android:theme="@style/AppTheme">
10         <activity android:name=".MainActivity">
11             <intent-filter>
12                 <action android:name="android.intent.action.MAIN" />
13
14                 <category android:name="android.intent.category.LAUNCHER" />
15             </intent-filter>
16         </activity>
17         //另外两个activity
18         <activity android:name=".Main2Activity"> </activity>
19         <activity android:name=".Main3Activity"></activity>
20     </application>
21 </manifest>

(2)layout中三个activity的三个布局文件activity_main.xml(这里演示一个,其余两个只是下面TextView文字不一样)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:id="@+id/activity_main"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     android:orientation="vertical"
 9     tools:context="com.example.administrator.intentflags.MainActivity">
10     <Button
11         android:text="第一个页面"
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:onClick="click1" />
15     <Button
16         android:text="第二个页面"
17         android:layout_width="match_parent"
18         android:layout_height="wrap_content"
19         android:onClick="click2" />
20     <Button
21         android:text="第三个页面"
22         android:layout_width="match_parent"
23         android:layout_height="wrap_content"
24         android:onClick="click3" />
25     <TextView
26         android:layout_width="match_parent"
27         android:layout_height="match_parent"
28         //其余两个仅文字不一样
29         android:text="第一个页面"
30         android:textSize="50sp"/>
31 </LinearLayout>

(3)java中三个activity的实现代码MainActivity.java(仅演示一个,其他两个完全相同)

 1 import android.content.Intent;
 2 import android.support.v7.app.AppCompatActivity;
 3 import android.os.Bundle;
 4 import android.util.Log;
 5 import android.view.View;
 6 /**
 7  * Created by panchengjia on 2016/12/14.
 8  */
 9 public class MainActivity extends AppCompatActivity {
10
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         //其他两个界面此处引用各自对应的layout文件
15         setContentView(R.layout.activity_main);
16     }
17     public void click1(View view){
18         Intent intent = new Intent(this,MainActivity.class);
19         startActivity(intent);
20         //记录Taskid用于实验说明
21         Log.i("Tag","页面一taskId:"+getTaskId());
22     }
23     public void click2(View view){
24         Intent intent = new Intent(this,Main2Activity.class);
25         startActivity(intent);
26         Log.i("Tag","页面二taskId:"+getTaskId());
27     }
28     public void click3(View view){
29         Intent intent = new Intent(this,Main3Activity.class);
30         startActivity(intent);
31         Log.i("Tag","页面三taskId:"+getTaskId());
32     }
33 }

第二步:standard默认(标准)模式下的演示实验

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

我们的操作结果如下图:

log图如下(未记录回退log):

通过分析操作图以及log,得出这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。

第三步:singleTop模式下的演示实验(设置页面二为singleTop)

在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。

AndroidMainfest.xml中设置代码如下:

1 <activity android:name=".Main2Activity"
2             android:launchMode="singleTop"> </activity>

我们的操作结果如下图:

log图如下(未记录回退log):

分析此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。

第四步:singleTask模式下的演示实验(设置页面二为singleTask)

在当前任务栈中,判断栈里是否存在Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity。

AndroidMainfest.xml中设置代码如下:

1     <activity android:name=".Main2Activity"
2             android:launchMode="singleTask"> </activity>

我们的操作结果如下图:

log图如下(未记录回退log):

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

第五步:singleInstance模式下的演示实验(设置页面二为singleInstance)

新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。

AndroidMainfest.xml中设置代码如下:

1 <activity android:name=".Main2Activity"
2             android:launchMode="singleInstance"> </activity>

我们的操作结果如下图:

log图如下(未记录回退log):

浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

转载于:https://www.cnblogs.com/panhouye/p/6181720.html

Android中Activity的四大启动模式实验简述相关推荐

  1. Activity之四大启动模式

    介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.sin ...

  2. android 怎么自定义任务栈,Android中的Activity详解--启动模式与任务栈

    目录 Activity 生命周期 任务栈 启动模式 Intent Flag taskAffinity属性 1.Activity activity的简单介绍就不写了,作为最常用的四大组件之一,肯定都很熟 ...

  3. Android中Activity的四种启动模式

    每次看到这种专有词汇都十分佩服创造者的智慧,创造者一定和我一样都中二,我已然确信. 我写博客的目的,就是希望不断磨练自己,让自己能够不将一件简单的事情讲的复杂,让自己能将一件复杂的事情讲的简单.嘛嘛, ...

  4. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  5. Android中Activity启动模式

    Android中Activity启动模式一共是四种,这里我写一下我对其的理解: 1.standard(默认) 2.singleTop,如果某个Activity设置了该属性,且当前Activity就是这 ...

  6. Android中Activity的启动模式和使用场景

    一.为什么需要启动模式 在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些A ...

  7. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

  8. Android入门之Activity四种启动模式

    一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置: 启 ...

  9. 【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 )

    文章目录 I . 默认启动模式 ( standard ) II . 栈顶复用启动模式 ( singleTop ) III . 栈内复用启动模式 ( singleTask ) IV . 单实例启动模式 ...

  10. android学习笔记---34_Activity的启动模式

    2013-04-04 ------------- 34_Activity的启动模式 --------------------------------------------------------- ...

最新文章

  1. linux apt-get 源,Ubuntu应用之——apt-get更改源地址
  2. Flask初识,第五篇 ,做一个用户登录之后查看学员信息的小例子
  3. WPF中设置ListView的Items颜色交替显示
  4. js(Dom+Bom)第二天(1)
  5. java确认rabbitmq_RabbitMQ 消息确认机制
  6. 大数据架构师学习方向---加油。
  7. APP架子迁移指南(一)
  8. DELL笔记本大小写切换时鼠标焦点转移的解决办法
  9. SQL:2016标准概念之数据类型
  10. 自己挖坑自己跳 之JsonMappingException: (was java.lang.NullPointerException) (through reference chain:)...
  11. 计算机网络共享无访问权限,Win7局域网访问WIN7共享文件夹提示无访问权限的多种解决方法...
  12. 用windows server 2003搭建文件服务器,windows server 2003文件服务器搭建的权限划分.doc...
  13. Android 手机震动功能实现
  14. 《前沿》(Frontiers)系列英文学术期介绍
  15. Java - 计算两个经纬度之间的直线距离
  16. 对于DCB的认识---GNSS 误差源
  17. slam 常用依赖库CMakeLists.txt 编写
  18. 3dMax模型导入SuperMap
  19. 安卓系统培训!Android高级工程师系列学习路线介绍,详细的Android学习指南
  20. h5 canvas html 合成,图片合成以及canvas的应用

热门文章

  1. 语音分析应用场景——来电原因分析与运营效率提升
  2. RedHat 6 创建和扩容LVM卷
  3. Flappy Bird 单机版
  4. centos6/7修改主机名的正确方法
  5. 2018双一流排名 计算机,2018年42所双一流大学本硕博录取人数排名,规模优势凸显!...
  6. win10安装ipython_win10下安装Anaconda的教程(python环境+jupyter_notebook)
  7. Zookeeper C API 指南七(Zookeeper 辅助 API 介绍)
  8. html模板引擎 字符串长度,javascript轻量级模板引擎juicer使用指南
  9. access用扫描枪输入_工业级高精度扫描枪适用在哪些环境
  10. 跨多个专业的从业者想转行做单片机怎么办