Android Activity 设计详解
文章目录
- Android Activity 设计说明
- 1. `Activity` 的生命周期
- 2. `Activity` 的启动模式
- 3. `Activity` 的通信
- 4. `Activity` 的布局和视图管理
- 5. `Activity` 的配置变化处理
- 6. `Activity` 的保存和恢复状态
- 7. `Activity` 的任务和返回栈
- 总结
Android Activity 设计说明
在 Android 中,Activity 是一个应用程序组件,提供一个屏幕供用户进行交互。每个 Activity 负责管理用户界面的一个独立部分,并处理用户的交互。下面是 Activity 的设计及其关键部分的详细说明。
1. Activity 的生命周期
Activity 的生命周期方法用于管理其状态转换。主要的生命周期方法有:
onCreate(Bundle savedInstanceState):Activity被创建时调用。在这里进行初始化,如设置布局、初始化组件等。onStart():Activity即将可见时调用。onResume():Activity即将开始与用户交互时调用。onPause(): 系统即将启动另一个Activity时调用。用于保存状态和释放资源。onStop():Activity不再可见时调用。通常用于释放资源。onDestroy():Activity被销毁前调用。用于清理资源。onRestart():Activity从停止状态再次启动前调用。
这些方法帮助 Activity 管理其状态并与用户进行交互。
2. Activity 的启动模式
Android 提供了几种不同的启动模式,用于定义 Activity 的启动行为。主要有以下几种:
standard: 每次启动Activity都会创建一个新的实例。singleTop: 如果当前任务的栈顶已经有该Activity实例,则重用该实例,否则创建新的实例。singleTask: 在栈中只保留一个Activity实例,如果实例存在,则将其置于栈顶。singleInstance: 创建一个单独的任务栈来管理该Activity,并且在该任务栈中只存在这一个Activity实例。
启动模式在 AndroidManifest.xml 中通过 android:launchMode 属性进行配置。
3. Activity 的通信
Activity 可以通过 Intent 进行通信。Intent 是一个消息对象,用于在不同的组件(如 Activity、Service)之间传递数据。启动另一个 Activity 的基本方式如下:
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("key", "value");
startActivity(intent);
接收数据的 Activity 可以在 onCreate 或 onNewIntent 方法中处理传递过来的 Intent:
Intent intent = getIntent();
String value = intent.getStringExtra("key");
4. Activity 的布局和视图管理
Activity 通过 setContentView 方法设置其布局:
setContentView(R.layout.activity_main);
布局文件(如 activity_main.xml)定义了该 Activity 的用户界面。可以通过 findViewById 方法获取视图并进行操作:
Button button = findViewById(R.id.my_button);
button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// Handle button click}
});
5. Activity 的配置变化处理
当设备配置发生变化(如屏幕旋转、键盘可用性变化等)时,Activity 会被销毁并重新创建。可以通过在 AndroidManifest.xml 中配置 android:configChanges 属性,告知系统在特定配置变化时不销毁 Activity,而是调用 onConfigurationChanged 方法:
<activity android:name=".MainActivity"android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
在 Activity 中覆盖 onConfigurationChanged 方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);// Handle configuration changes
}
6. Activity 的保存和恢复状态
为了在配置变化或其他情况下保存和恢复 Activity 的状态,可以使用 onSaveInstanceState 和 onRestoreInstanceState 方法:
@Override
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("key", "value");
}@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);String value = savedInstanceState.getString("key");
}
7. Activity 的任务和返回栈
Android 使用任务和返回栈(Back Stack)来管理 Activity 的导航。每个任务由一个栈(返回栈)来管理 Activity。Activity 被启动时,会被添加到任务的返回栈中。用户按下返回按钮时,系统会从返回栈中弹出当前的 Activity 并显示前一个 Activity。
总结
Activity 是 Android 应用程序的核心组件之一,负责管理用户界面和用户交互。通过生命周期方法、启动模式、视图管理、配置变化处理和任务管理,Activity 提供了丰富的功能来构建和管理复杂的应用程序界面。了解和掌握 Activity 的设计和使用,对于开发高效和响应迅速的 Android 应用程序至关重要。
| 欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力 |

相关文章:
Android Activity 设计详解
文章目录 Android Activity 设计说明1. Activity 的生命周期2. Activity 的启动模式3. Activity 的通信4. Activity 的布局和视图管理5. Activity 的配置变化处理6. Activity 的保存和恢复状态7. Activity 的任务和返回栈 总结 Android Activity 设计说明 在 Android 中&#…...
国家开放大学,javaScript程序设计-形考任务-实训五:设计登录和注册页|实训六:设计简单的购物车
实训五:设计登录和注册页 1. 题目 设计登录和注册页。 2. 目的 (1)掌握表单域的引用方法。 (2)掌握常用控件的基本方法。 (3)掌握事件的处理方法。 (4)理解Cookie…...
微服务可用性之隔离
摘要 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况,动静隔离、读写隔离、热点隔离、资源隔离等场景。 为什么要隔离 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用,不至于系统陷入整体性瘫痪,…...
设计模式——概述
1.设计模式定义 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性&#…...
#P0564. 数组元素查找升级版
问题描述 给你 n 个数,再给你一个数 k,查找 k 在这 n 个数中第一次出现的位置(从 0 开始计数),不存在输出 No。 输入 多组测试数据,对于每组测试数据: 第一行输入一个整数 n (1 ≤ n ≤ 100…...
如何修改WordPress网站的域名
我的网站用的是Hostease的虚拟主机,但是域名是之前在其他平台买的,而且已经快到期了,因为主机和域名在不同的平台上,管理不太方便,所以我又在Hostease重新注册了一个域名,然后把网站换成了新的域名…...
python爬虫[简易版]
python爬数据[简易版] 对于每个网站的爬的原理基本是一样的,但是具体的代码写法的区别就在于爬的数据中解析出想要的数据格式: 以爬取有道词典中的图片为例: 第一步:打开网站,分析图片的数据源来自哪里, https://dict-subsidiary.youdao.com/home/content?invalid&pre…...
128天的创意之旅:从初心到成就,我的博客创作纪念日回顾
文章目录 🚀机缘:初心的种子——回望创作之旅的启航🌈收获:成长的果实——128天创作之旅的宝贵馈赠❤️日常:创作与生活的交织👊成就:代码的艺术🚲憧憬:未来的蓝图 &…...
前端绘制流程节点数据
根据数据结构和节点的层级、子节点id,前端自己绘制节点位置和关联关系、指向、已完成节点等 <template><div><div>通过后端节点和层级,绘制出节点以及关联关系等</div><div class"container" ref"container&…...
2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)
黑翅鸢是一种上半身蓝灰色,下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食,具有很强的悬停能力,能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发,该算法作者建立…...
Linux 内核开发 28 内核模块文件ko文件介绍
Linux 内核开发 28 内核模块文件ko文件介绍 1. ELF格式简介 内核模块文件ko文件,格式为elf格式, ELF(Executable and Linkable Format)可执行链接格式,是一种用于存储可执行程序、目标代码、共享库和内核模块的标准文件…...
DDR5—新手入门学习(一)【1-5】
目录 1、DDR背景 (1)SDR SDRAM时代 : (2)DDR SDRAM的创新 : (3)DDR技术的演进 : (4)需求推动: 2、了解内存 (1&…...
力扣HOT100 - 138. 随机链表的复制
解题思路: class Solution {public Node copyRandomList(Node head) {if(headnull) return null;Node p head;//第一步,在每个原节点后面创建一个新节点//1->1->2->2->3->3while(p!null) {Node newNode new Node(p.val);newNode.next …...
深入分析 Android Activity (五)
深入分析 Android Activity (五) 1. Activity 的进程和线程模型 在 Android 中,Activity 默认在主线程(也称为 UI 线程)中运行。理解进程和线程模型对于开发响应迅速且无阻塞的应用程序至关重要。 1.1 主线程与 UI 操作 所有 UI 操作必须…...
Kubernetes 应用滚动更新
Kubernetes 应用版本号 在 Kubernetes 里,版本更新使用的不是 API 对象,而是两个命令:kubectl apply 和 kubectl rollout,当然它们也要搭配部署应用所需要的 Deployment、DaemonSet 等 YAML 文件。 在 Kubernetes 里应用都是以 …...
五分钟”手撕“图书管理系统
前言: 图书馆管理系统需要结合JavaSE的绝大部分知识,是一个很好的训练项目。 为了让大家更加方便的查阅与学习,我把代码放开头,供大家查询。 还有对代码的分析,我将以类为单位分开讲解。 目录 全部代码 Main类 Us…...
8个实用网站和软件,收藏起来一定不后悔~
整理了8个日常生活中经常能用得到的网站和软件,收藏起来一定不会后悔~ 1.ZLibrary zh.zlibrary-be.se/这个网站收录了超千万的书籍和文章资源,国内外的各种电子书资源都可以在这里搜索,98%以上都可以在网站内找到,并且支持免费下…...
电商内卷时代,视频号小店凭借一己之力“脱颖而出”
大家好,我是电商笨笨熊 今年618各大电商平台花样百出; 某宝更是直接取消了“预售”,从5月就开始进入618预热期; 不少玩家既开心又难过,市场如此内卷,618确实是个爆发期,但更多的需要不断压低…...
【论文笔记】| 定制化生成PuLID
PuLID: Pure and Lightning ID Customization via Contrastive Alignment ByteDance, arXiv:2404.16022v1 Theme: Customized generation 原文链接:https://arxiv.org/pdf/2404.16022 Main Work 提出了 Pure 和 Lightning ID 定制 (PuLID),这是一种用于…...
P1638 逛画展
题目描述 博览馆正在展出由世上最佳的 𝑚 位画家所画的图画。 游客在购买门票时必须说明两个数字,𝑎 和 𝑏,代表他要看展览中的第 𝑎 幅至第 𝑏 幅画(包含 𝑎,…...
Neosegment库:面向七段数码管式NeoPixel的嵌入式驱动框架
1. Neosegment库概述:面向七段数码管式NeoPixel模块的嵌入式驱动框架Neosegment是一个专为Neosegment Digit模块设计的Arduino兼容嵌入式驱动库,其核心目标是将WS281x/SK6812系列智能LED的底层时序控制与七段数码管(7-segment display&#x…...
内网渗透全流程拆解|从入门到实战,小白也能看懂的步骤
内网渗透不是“盲目尝试”,而是遵循固定流程的系统化操作,核心流程可概括为:信息收集→漏洞利用→权限提升→横向移动→权限维持→痕迹清理,每个环节环环相扣,缺一不可。本文将结合小白易理解的实战场景,详…...
芯片缺货潮下的应对策略与国产替代方案
1. 芯片缺货潮下的行业现状最近我的一个产品项目中,原本采购价仅5元的ST品牌MCU(微控制器)价格飙升至70元,涨幅高达14倍。这个案例并非个例,而是当前全球半导体行业供应链危机的缩影。作为从业十余年的硬件工程师&…...
seo sem公司如何制定营销策略
SEO SEM公司如何制定有效的营销策略 在当今数字化时代,SEO(搜索引擎优化)和SEM(搜索引擎营销)已经成为企业推广和品牌建立的关键组成部分。无论是中小企业还是大型跨国公司,它们都需要高效、精准的营销策略…...
Qwen2.5-0.5B手机AI入门:从下载到对话,30分钟全搞定
Qwen2.5-0.5B手机AI入门:从下载到对话,30分钟全搞定 1. 为什么选择Qwen2.5-0.5B-Instruct? 在移动设备上运行AI大模型听起来像是科幻场景,但Qwen2.5-0.5B-Instruct让它变成了现实。这个由阿里通义实验室开源的轻量级语言模型&am…...
AIGlasses_for_navigation多场景落地:日常通勤、医院导诊、地铁站导航三场景实测
AIGlasses_for_navigation多场景落地:日常通勤、医院导诊、地铁站导航三场景实测 1. 引言:当导航从手机屏幕“走”到眼前 想象一下这样的场景:你走在陌生的城市街道,要去一个从未去过的咖啡馆。你不需要低头看手机地图ÿ…...
28-模块四-AI代码审核实战 第28讲-代码质量评分体系 - 可维护性 可读性 可测试性的量化指标
本讲目标:理解「量化指标」如何把主观感受变成可治理信号;掌握从 Python AST 计算圈复杂度与认知复杂度的基本方法;实现可配置权重的 QualityScorer、历史趋势与团队基准对比接口;输出 JSON 与 Markdown 双语报告,嵌入 CodeSentinel 审核结论。本讲强调可解释:每个分数都…...
51单片机实战:从零构建电子密码锁系统
1. 项目背景与硬件准备 第一次接触51单片机时,我就被它的实用性深深吸引。作为电子爱好者入门的最佳选择,STC89C52这款经典芯片就像乐高积木的基础模块——价格亲民(某宝20元就能买到开发板)、资源丰富(8K Flash、512…...
网站 SEO 标题要包含关键词吗
网站 SEO 标题要包含关键词吗?探讨最佳实践和SEO优化策略 在当今互联网时代,网站的SEO优化已经成为提升网站流量和用户体验的重要手段。其中,网站标题的优化也至关重要。网站 SEO 标题要包含关键词吗?这个问题备受争议,…...
杨立昆新模型杀疯了,1500万参数单GPU就能碾压大厂?
就在前几天,AI教父、图灵奖得主杨立昆刚发了个新模型,名叫LeWorldModel,论文一发出,整个圈子瞬间炸锅。说出来你们可能都不信——这货只有1500万参数,单块GPU几个小时就能训完,随便一个研究者都拉起来跑一遍…...
