1.0 Android中Activity的基础知识
一:Activity的定义
Activity是一个应用组件,它提供了一个用户界面,允许用户执行一个单一的、明确的操作,用户看的见的操作都是在activity中执行的。Activity的实现需要在manifest中进行定义,不让会造成程序报错。
1.1 Toast
Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。
Toast只能在UI线程中进行定义并使用。
Toast.makeText(this, "You have used Toast", Toast.LENGTH_SHORT).show()
第一个参数是Context,也就是Toast要求的上下文
第二个参数是Toast显示的文本内容
第三个参数是Toast显示的时长,有两个内置常量可以选择:Toast.LENGTH_SHORT和Toast.LENGTH_LONG。
1.2 Menu菜单
在res -> menu文件夹下创建文件
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/add_item"android:title="Add"/><itemandroid:id="@+id/remove_item"android:title="Remove"/>
</menu>
创建了两个菜单项,其中标签用来创建具体的某一个菜单项,id为唯一的标识符,title为菜单项目的名称。
1.2.1 初始化menu
override fun onCreateOptionsMenu(menu: Menu?): Boolean {menuInflater.inflate(R.menu.main, menu)return true
}
1.2.2 menu的执行
override fun onOptionsItemSelected(item: MenuItem): Boolean {when (item.itemId) {R.id.add_item -> Toast.makeText(this, "You clicked Add",Toast.LENGTH_SHORT).show()R.id.remove_item -> Toast.makeText(this, "You clicked Remove",Toast.LENGTH_SHORT).show()}return true
}

二、Intent的使用
2.1 显式Intent
指定具体的,需要跳转的Activity
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
Kotlin中SecondActivity::class.java的写法就相当于Java中SecondActivity.class的写法
2.2 隐式Intent
需要指定和,且与在manifest中定义的匹配才可进行跳转
不指定具体的activity,而是声明其action、category等属性
每个Intent中只能指定一个action,但能指定多个category。
button1.setOnClickListener {val intent = Intent("com.example.activitytest.ACTION_START")startActivity(intent)
}
android.intent.category.DEFAULT为默认的,可不用设置,如果设置未声明的category,会操作软件崩溃。
2.2.1 打开浏览器
button1.setOnClickListener {val intent = Intent(Intent.ACTION_VIEW)intent.data = Uri.parse("https://www.baidu.com")startActivity(intent)
}
标签的设置和设置action标签层级一致,都在manifest中的activity进行设置。
标签中主要可以配置以下内容。
● android:scheme。用于指定数据的协议部分,如上例中的https部分。
● android:host。用于指定数据的主机名部分,如上例中的www.baidu.com部分。
● android:port。用于指定数据的端口部分,一般紧随在主机名之后。
● android:path。用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
● android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有当标签中指定的内容和Intent中携带的Data完全一致时,当前Activity才能够响应该Intent。
在manifest中设置data标签,在标签中,我们通过android:scheme指定了数据的协议必须是https协议,才可以实现浏览器的效果。
2.2.2 拨打电话
除了https协议外,我们还可以指定很多其他协议,比如geo表示显示地理位置、tel表示拨打电话。
button1.setOnClickListener {val intent = Intent(Intent.ACTION_DIAL)intent.data = Uri.parse("tel:10086")startActivity(intent)
}
2.3 携带数据
Intent从Activity_A携带数据给Activity_B,并返回数据给Activity_A
2.3.1 数据发送
button1.setOnClickListener {val data = "Hello SecondActivity"val intent = Intent(this, SecondActivity::class.java)intent.putExtra("extra_data", data)startActivity(intent)
}
putExtra()方法接收两个参数,第一个参数是键,用于之后从Intent中取值,第二个参数才是真正要传递的数据。
数据接收
class SecondActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.second_layout)val extraData = intent.getStringExtra("extra_data")Log.d("SecondActivity", "extra data is $extraData")}}
由于传递的是字符串,所以使用getStringExtra()方法来获取传递的数据;
如果传递的是整型数据,则使用getIntExtra()方法;
如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。
2.4 返回数据
Activity类中还有一个用于启动Activity的startActivityForResult()方法,但它期望在Activity销毁的时候能够返回一个结果给上一个Activity。
在Activity_A中,启动:
button1.setOnClickListener {val intent = Intent(this, SecondActivity::class.java)startActivityForResult(intent, 1)
}
在Activity_B中定义个按钮进行数据传回:
button2.setOnClickListener {val intent = Intent()intent.putExtra("data_return", "Hello FirstActivity")setResult(RESULT_OK, intent)finish()}
setResult()方法接收两个参数:第一个参数用于向上一个Activity返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED这两个值;第二个参数则把带有数据的Intent传递回去。
在activity_A中复写方法onActivityResult,在方法中接收数据:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)when (requestCode) {1 -> if (resultCode == RESULT_OK) {val returnedData = data?.getStringExtra("data_return")Log.d("FirstActivity", "returned data is $returnedData")}}
}
Activity可以跳转至多个数据并返回数据,requestCode为防止混淆。
onActivityResult()方法带有3个参数:第一个参数requestCode,即我们在启动Activity时传入的请求码;第二个参数resultCode,即我们在返回数据时传入的处理结果;第三个参数data,即携带着返回数据的Intent。
如果用户在SecondActivity中并不是通过点击按钮,而是通过按下Back键回到FirstActivity,需要重写一下onBackPressed方法,在方法中对返回的数据进行处理。
三、Activity的生命周期
- onCreate()
在Activity第一次被创建的时候调用 - onStart()
这个方法在Activity由不可见变为可见的时候调用 - onResume()
这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。 - onPause()
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使 - onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。 - onDestroy()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。 - onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
从onCreate到onDestroy表示Activity的一整个周期,从创建到销毁

onSaveInstanceState()方法,保存临时数据
如果在内存不足的情况,处于onStop状态的Activity会被回收,需要保存临时数据
Activity中提供了一个onSaveInstanceState()回调方法,这个方法可以保证在Activity被回收之前一定会被调用。
nSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如可以使用putString()方法保存字符串,使用putInt()方法保存整型数据,以此类推。每个保存方法需要传入两个参数,第一个参数是键,用于后面从Bundle中取值,第二个参数是真正要保存的内容。
恢复:
在onCreate中进行恢复,利用onCreate中的Bundle参数
四、Activity的启动方式
4.1 standard
standard是Activity默认的启动模式,在不进行显式指定的情况下,所有Activity都会自动使用这种启动模式,这种启动模式,启动Activity就创建一个新的Actiivty,不考虑其之前是否存在。

4.2 singleTop
当Activity的启动模式指定为singleTop,在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,不会再创建新的Activity实例即在栈顶调用,否则创建。

4.3 singleTask
当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会在返回栈中检查是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并把在这个Activity之上的所有其他Activity统统出栈,如果没有发现就会创建一个新的Activity实例。检查任务栈中是否存在,不存在创建。

4.4 singleInstance
指定为singleInstance模式的Activity会启用一个新的返回栈来管理这个Activity(其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)
Activity位于独立的任务栈中。

五、 Activity的便利使用
5.1 单例类管理Activity
创建单例类对Activity进行管理
object ActivityCollector {private val activities = ArrayList<Activity>()fun addActivity(activity: Activity) {activities.add(activity)}fun removeActivity(activity: Activity) {activities.remove(activity)}fun finishAll() {for (activity in activities) {if (!activity.isFinishing) {activity.finish()}}activities.clear()}}
5.2 BaseActivity中实现
open class BaseActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.d("BaseActivity", javaClass.simpleName)ActivityCollector.addActivity(this)}override fun onDestroy() {super.onDestroy()ActivityCollector.removeActivity(this)}}
杀掉进程的代码
android.os.Process.killProcess(android.os.Process.myPid())
killProcess()方法用于杀掉一个进程,它接收一个进程id参数,我们可以通过myPid()方法来获得当前程序的进程id。需要注意的是,killProcess()方法只能用于杀掉当前程序的进程,不能用于杀掉其他程序。
5.3 启动Activity的最佳方法:
class SecondActivity : BaseActivity() {...companion object {fun actionStart(context: Context, data1: String, data2: String) {val intent = Intent(context, SecondActivity::class.java)intent.putExtra("param1", data1)intent.putExtra("param2", data2)context.startActivity(intent)}}
}
在这里我们使用了一个新的语法结构companion object,并在companion object中定义了一个actionStart()方法。
启动代码
button1.setOnClickListener {SecondActivity.actionStart(this, "data1", "data2")
}
相关文章:
1.0 Android中Activity的基础知识
一:Activity的定义 Activity是一个应用组件,它提供了一个用户界面,允许用户执行一个单一的、明确的操作,用户看的见的操作都是在activity中执行的。Activity的实现需要在manifest中进行定义,不让会造成程序报错。 1.…...
线代知识点总结
目录 一.初等行/列变换 1.计算行列式时,行列变换都可 2.求矩阵的秩时,行列变换都可 3.解线性方程组时,仅能使用初等行变换 4.判定解的情况,单纯求r(A),r(A,b)的过程行列变换都可 5.求向量组极大无关组、线性表出关系&#x…...
案例学习-存量更新规划实施探索(武汉)
案例学习-存量更新规划实施探索(武汉) 武汉市在早期旧城更新实践中发现零散化的更新往往导致资源配置分散、城市建设破碎化等弊病,特别是由于过于强调项目自身“经济平衡”,在实施过程中也逐步暴露出住宅占比过大、强度偏高、公服…...
C#操作MySQL从入门到精通(17)——使用联结
前言: 我们在查询数据的过程中有时候查询的数据不是来自一个表而是来自多个表,本文使用的测试数据如下: 本文使用了两个表student_info、address_info student_info的数据如下: address_info的数据如下: 1、内联结 所谓内联结就是求交集,两个表都有的数据才是有效数…...
MyBatis 关于查询语句上配置的详细内容
1. MyBatis 关于查询语句上配置的详细内容 文章目录 1. MyBatis 关于查询语句上配置的详细内容2. 准备工作3. SQL查询结果,返回为POJO实体类型4. SQL查询结果,返回为List<POJO\> 集合类型5. SQL查询结果,返回为Map 集合6. SQL查询结果&…...
基于STM32和人工智能的智能家居监控系统
目录 引言环境准备智能家居监控系统基础代码实现:实现智能家居监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景:智能家居管理与优化问题解决方案与优化收尾与总结 1. 引言 随着智能家居技术的快速发展&…...
这三款使用的视频、图片设计工具,提供工作效率
Videograp Videograp是一款专注于视频生成的工具,特别适合需要快速剪辑和编辑视频的用户。Videograp具备以下特点: 影音比例转换:Videograp支持调整视频的分辨率和比例,使其更适合不同的播放环境和设备。 AI快剪:该工…...
[Algorithm][贪心][最长递增子序列][递增的三元子序列][最长连续递增序列][买卖股票的最佳时机][买卖股票的最佳时机Ⅱ]详细讲解
目录 1.最长递增子序列1.题目链接2.算法原理详解3.代码实现 2.递增的三元子序列1.题目链接2.算法原理详解3.题目链接 3.最长连续递增序列1.题目链接2.算法原理详解3.代码实现 4.买卖股票的最佳时机1.题目链接2.算法原理详解3.代码实现 5.买卖股票的最佳时机 II1.题目链接2.算法…...
手把手教你入门vue+springboot开发(三)--登录功能后端
文章目录 前言一、redis安装二、后端代码1.修改application.yml文件2.增加utils文件3.增加Result类4.修改UserController类5.修改UserMapper类6.修改UserService和UserServiceImpl类7.增加LoginInterceptor类8.增加WebConfig类9.修改pom.xml文件 前言 前两篇我们用vuespringbo…...
三款有3D效果的js图表库
1、G2简洁的渐进式可视化语法。https://g2.antv.antgroup.com/manual/extra-topics/3d-charts 2、 https://www.highcharts.com/https://www.highcharts.com/ 3、https://www.fusioncharts.com/charts/pie-doughnut-charts/donut-chart-in-3d?frameworkjavascripthttps://www…...
【SQLAlChemy】表之间的关系,外键如何使用?
表之间的关系 数据库表之间的关系分为三种: 一对一关系(One-to-One):在这种关系中,表A的每一行都与表B的一行关联,反之亦然。例如,每个人都有一个唯一的社保号,每个社保号也只属于…...
Linux 基础IO 二
1.文件描述符的分配规则 #include<stdio.h> #include<string.h> //#include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>int main() {close(1);//fd分配原则,从最小的开始,没有被占用…...
找工作小项目:day15-macOS支持、完善逻辑
macOS支持、完善逻辑 目前的代码可以在Linux上完美运行编译,在Windows上也可以通过WSL编译运行源代码,但是在MacBook上却无法运行编译,这主要是由于macOS上没有epoll,取而代之的很相似的kqueue。由于操作系统不同,我们…...
植物大战僵尸杂交版 v2.0.88 mac版 Plants vs. Zombies 杂交版下载
特别注意:该游戏最低系统要求为macOS Sonoma 14.X,低于此系统版本的请勿下载! 游戏介绍 植物大战僵尸杂交版是由B站UP主“潜艇伟伟迷”制作的一款结合了《植物大战僵尸》原有元素与创新玩法的游戏。这款游戏以其独特的“杂交”植物概念在B站…...
PHP中的while循环:用法、技巧与最佳实践
在PHP编程中,while循环是一种基本且常用的控制结构,用于重复执行代码块,直到指定条件为假。while循环在处理未知迭代次数的任务时特别有用,例如读取文件内容、处理用户输入或动态生成数据等。与for循环不同,while循环适…...
如何解决跨境传输常见的安全及效率问题?
在当今全球化的商业版图中,企业为了拓展国际市场和增强竞争力,跨境传输数据已成为一项不可或缺的业务活动。合格的数据跨境传输方案,应考虑以下要素: 法律合规性:确保方案符合所有相关国家的数据保护法律和国际法规&am…...
『大模型笔记』主成分分析(PCA)解释:简化机器学习中的复杂数据!
主成分分析(PCA)解释:简化机器学习中的复杂数据 文章目录 一. 主成分分析(PCA)解释:简化机器学习中的复杂数据!二. 参考文献一. 主成分分析(PCA)解释:简化机器学习中的复杂数据! 主成分分析(Principal Component Analysis,简称PCA)通过 将大型数据集中的维度减少…...
springboot与flowable(5):任务分配(表达式)
在做流程定义时我们需要给相关的用户节点指派对应的处理人。在flowable中提供了三种分配的方式。 一、固定分配 在分配用户时选择固定值选项确认即可。 二、表达式 1、值表达式 2、方法表达式 三、表达式流程图测试 1、导出并部署 导出流程图,复制到项目中 部署流…...
如何使用CCS9.3打开CCS3.0工程
如何使用CCS9.3打开CCS3.0工程 点菜单栏上的project,选择Import Legacy CCSv3.3 Porjects…,弹出对话框,通过Browse…按钮导入一个3.3版本的工程项目; 选择.pjt文件,选择Copy projects into worlkspace 右击选择P…...
Stable Diffusion 3 Medium 模型
开源SD3,中型版本,20亿参数,Stable Diffusion 3 Medium,系统内存要求32G,显卡6G。 a female character with long, flowing hair that appears to be made of ethereal, swirling patterns resembling the Northern Li…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
