详解Android中Activity的四大启动模式实验简述
发布时间 - 2026-01-10 21:49:51 点击率:次作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,来帮助大家理解Activity的四大启动模式。

演示效果如下:
第一步:实验前准备,相关配置文件以及Activity的建立
(1)AndroidMainfest.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.administrator.intentflags">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//另外两个activity
<activity android:name=".Main2Activity"> </activity>
<activity android:name=".Main3Activity"></activity>
</application>
</manifest>
(2)layout中三个activity的三个布局文件activity_main.xml(这里演示一个,其余两个只是下面TextView文字不一样)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.administrator.intentflags.MainActivity">
<Button
android:text="第一个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click1" />
<Button
android:text="第二个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click2" />
<Button
android:text="第三个页面"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click3" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
//其余两个仅文字不一样
android:text="第一个页面"
android:textSize="50sp"/>
</LinearLayout>
(3)java中三个activity的实现代码MainActivity.java(仅演示一个,其他两个完全相同)
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
/**
* Created by panchengjia on 2016/12/14.
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//其他两个界面此处引用各自对应的layout文件
setContentView(R.layout.activity_main);
}
public void click1(View view){
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
//记录Taskid用于实验说明
Log.i("Tag","页面一taskId:"+getTaskId());
}
public void click2(View view){
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);
Log.i("Tag","页面二taskId:"+getTaskId());
}
public void click3(View view){
Intent intent = new Intent(this,Main3Activity.class);
startActivity(intent);
Log.i("Tag","页面三taskId:"+getTaskId());
}
}
第二步:standard默认(标准)模式下的演示实验
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
我们的操作结果如下图:
log图如下(未记录回退log):
通过分析操作图以及log,得出这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。
第三步:singleTop模式下的演示实验(设置页面二为singleTop)
在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。
AndroidMainfest.xml中设置代码如下:
<activity android:name=".Main2Activity"
android:launchMode="singleTop"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
分析此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。
第四步:singleTask模式下的演示实验(设置页面二为singleTask)
在当前任务栈中,判断栈里是否存在Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity。
AndroidMainfest.xml中设置代码如下:
<activity android:name=".Main2Activity"
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中设置代码如下:
<activity android:name=".Main2Activity"
android:launchMode="singleInstance"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# activity四大启动模式
# android
# 启动activity
# activity
# 关于Android中点击通知栏的通知启动Activity问题解决
# Android中activity的启动模式
# Android利用Intent启动和关闭Activity
# Android编程中Activity的四种启动模式
# Android 启动另一个App/apk中的Activity实现代码
# 则会
# 多个
# 模式下
# 创建一个
# 如下图
# 未记录
# 第一个
# 二为
# 会在
# 不存在
# 配置文件
# 应用程序
# 检测到
# 是在
# 我在
# 在这个
# 并在
# 第二个
# 在这种
# 只有一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
油猴 教程,油猴搜脚本为什么会网页无法显示?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
高性能网站服务器部署指南:稳定运行与安全配置优化方案
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
javascript基于原型链的继承及call和apply函数用法分析
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
微信小程序 闭包写法详细介绍
如何用PHP工具快速搭建高效网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
北京的网站制作公司有哪些,哪个视频网站最好?
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel如何自定义分页视图?(Pagination示例)
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何快速选择适合个人网站的云服务器配置?
Python自动化办公教程_ExcelWordPDF批量处理案例
如何用低价快速搭建高质量网站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
简单实现Android文件上传
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
JS经典正则表达式笔试题汇总
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
如何登录建站主机?访问步骤全解析
如何在云主机上快速搭建网站?
如何在Windows服务器上快速搭建网站?
如何在万网开始建站?分步指南解析
Python高阶函数应用_函数作为参数说明【指导】
Laravel如何使用Telescope进行调试?(安装和使用教程)
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
在线制作视频网站免费,都有哪些好的动漫网站?
装修招标网站设计制作流程,装修招标流程?
深圳网站制作的公司有哪些,dido官方网站?
如何用PHP快速搭建高效网站?分步指南
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在局域网内绑定自建网站域名?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
香港服务器网站卡顿?如何解决网络延迟与负载问题?

