当前位置: 首页 > news >正文

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 是一个消息对象,用于在不同的组件(如 ActivityService)之间传递数据。启动另一个 Activity 的基本方式如下:

Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

接收数据的 Activity 可以在 onCreateonNewIntent 方法中处理传递过来的 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 的状态,可以使用 onSaveInstanceStateonRestoreInstanceState 方法:

@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 的导航。每个任务由一个栈(返回栈)来管理 ActivityActivity 被启动时,会被添加到任务的返回栈中。用户按下返回按钮时,系统会从返回栈中弹出当前的 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程序设计-形考任务-实训五:设计登录和注册页|实训六:设计简单的购物车

实训五&#xff1a;设计登录和注册页 1. 题目 设计登录和注册页。 2. 目的 &#xff08;1&#xff09;掌握表单域的引用方法。 &#xff08;2&#xff09;掌握常用控件的基本方法。 &#xff08;3&#xff09;掌握事件的处理方法。 &#xff08;4&#xff09;理解Cookie…...

微服务可用性之隔离

摘要 ​ 本文主要微服务场景下服务的可用性保障之隔离。隔离又分为几种情况&#xff0c;动静隔离、读写隔离、热点隔离、资源隔离等场景。 为什么要隔离 ​ 本质上是对资源进行分割确保在出现故障的时候服务只是部分不可用&#xff0c;不至于系统陷入整体性瘫痪&#xff0c;…...

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上&#xff0c;通过一些成熟的设计方案来指导新项目的开发和设计&#xff0c;以便于我们开发出具有更好的灵活性和可扩展性&#…...

#P0564. 数组元素查找升级版

问题描述 给你 n 个数&#xff0c;再给你一个数 k&#xff0c;查找 k 在这 n 个数中第一次出现的位置&#xff08;从 0 开始计数&#xff09;&#xff0c;不存在输出 No。 输入 多组测试数据&#xff0c;对于每组测试数据&#xff1a; 第一行输入一个整数 n (1 ≤ n ≤ 100…...

如何修改WordPress网站的域名

我的网站用的是Hostease的虚拟主机&#xff0c;但是域名是之前在其他平台买的&#xff0c;而且已经快到期了&#xff0c;因为主机和域名在不同的平台上&#xff0c;管理不太方便&#xff0c;所以我又在Hostease重新注册了一个域名&#xff0c;然后把网站换成了新的域名&#xf…...

python爬虫[简易版]

python爬数据[简易版] 对于每个网站的爬的原理基本是一样的,但是具体的代码写法的区别就在于爬的数据中解析出想要的数据格式: 以爬取有道词典中的图片为例: 第一步:打开网站,分析图片的数据源来自哪里, https://dict-subsidiary.youdao.com/home/content?invalid&pre…...

128天的创意之旅:从初心到成就,我的博客创作纪念日回顾

文章目录 &#x1f680;机缘&#xff1a;初心的种子——回望创作之旅的启航&#x1f308;收获&#xff1a;成长的果实——128天创作之旅的宝贵馈赠❤️日常&#xff1a;创作与生活的交织&#x1f44a;成就&#xff1a;代码的艺术&#x1f6b2;憧憬&#xff1a;未来的蓝图 &…...

前端绘制流程节点数据

根据数据结构和节点的层级、子节点id&#xff0c;前端自己绘制节点位置和关联关系、指向、已完成节点等 <template><div><div>通过后端节点和层级&#xff0c;绘制出节点以及关联关系等</div><div class"container" ref"container&…...

2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)

黑翅鸢是一种上半身蓝灰色&#xff0c;下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食&#xff0c;具有很强的悬停能力&#xff0c;能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发&#xff0c;该算法作者建立…...

Linux 内核开发 28 内核模块文件ko文件介绍

Linux 内核开发 28 内核模块文件ko文件介绍 1. ELF格式简介 内核模块文件ko文件&#xff0c;格式为elf格式&#xff0c; ELF&#xff08;Executable and Linkable Format&#xff09;可执行链接格式&#xff0c;是一种用于存储可执行程序、目标代码、共享库和内核模块的标准文件…...

DDR5—新手入门学习(一)【1-5】

目录 1、DDR背景 &#xff08;1&#xff09;SDR SDRAM时代 &#xff1a; &#xff08;2&#xff09;DDR SDRAM的创新 &#xff1a; &#xff08;3&#xff09;DDR技术的演进 &#xff1a; &#xff08;4&#xff09;需求推动&#xff1a; 2、了解内存 &#xff08;1&…...

力扣HOT100 - 138. 随机链表的复制

解题思路&#xff1a; class Solution {public Node copyRandomList(Node head) {if(headnull) return null;Node p head;//第一步&#xff0c;在每个原节点后面创建一个新节点//1->1->2->2->3->3while(p!null) {Node newNode new Node(p.val);newNode.next …...

深入分析 Android Activity (五)

深入分析 Android Activity (五) 1. Activity 的进程和线程模型 在 Android 中&#xff0c;Activity 默认在主线程&#xff08;也称为 UI 线程&#xff09;中运行。理解进程和线程模型对于开发响应迅速且无阻塞的应用程序至关重要。 1.1 主线程与 UI 操作 所有 UI 操作必须…...

Kubernetes 应用滚动更新

Kubernetes 应用版本号 在 Kubernetes 里&#xff0c;版本更新使用的不是 API 对象&#xff0c;而是两个命令&#xff1a;kubectl apply 和 kubectl rollout&#xff0c;当然它们也要搭配部署应用所需要的 Deployment、DaemonSet 等 YAML 文件。 在 Kubernetes 里应用都是以 …...

五分钟”手撕“图书管理系统

前言&#xff1a; 图书馆管理系统需要结合JavaSE的绝大部分知识&#xff0c;是一个很好的训练项目。 为了让大家更加方便的查阅与学习&#xff0c;我把代码放开头&#xff0c;供大家查询。 还有对代码的分析&#xff0c;我将以类为单位分开讲解。 目录 全部代码 Main类 Us…...

8个实用网站和软件,收藏起来一定不后悔~

整理了8个日常生活中经常能用得到的网站和软件&#xff0c;收藏起来一定不会后悔~ 1.ZLibrary zh.zlibrary-be.se/这个网站收录了超千万的书籍和文章资源&#xff0c;国内外的各种电子书资源都可以在这里搜索&#xff0c;98%以上都可以在网站内找到&#xff0c;并且支持免费下…...

电商内卷时代,视频号小店凭借一己之力“脱颖而出”

大家好&#xff0c;我是电商笨笨熊 今年618各大电商平台花样百出&#xff1b; 某宝更是直接取消了“预售”&#xff0c;从5月就开始进入618预热期&#xff1b; 不少玩家既开心又难过&#xff0c;市场如此内卷&#xff0c;618确实是个爆发期&#xff0c;但更多的需要不断压低…...

【论文笔记】| 定制化生成PuLID

PuLID: Pure and Lightning ID Customization via Contrastive Alignment ByteDance, arXiv:2404.16022v1 Theme: Customized generation 原文链接&#xff1a;https://arxiv.org/pdf/2404.16022 Main Work 提出了 Pure 和 Lightning ID 定制 (PuLID)&#xff0c;这是一种用于…...

P1638 逛画展

题目描述 博览馆正在展出由世上最佳的 &#x1d45a; 位画家所画的图画。 游客在购买门票时必须说明两个数字&#xff0c;&#x1d44e; 和 &#x1d44f;&#xff0c;代表他要看展览中的第 &#x1d44e; 幅至第 &#x1d44f; 幅画&#xff08;包含 &#x1d44e;,&#x1…...

Vite 双引擎架构 —— Esbuild 概念篇

Vite 底层采用 双引擎架构&#xff0c;核心构建引擎是 Esbuild 和 Rollup&#xff0c;二者在开发和生产环境中分工协作&#xff0c;共同实现高性能构建。不可否认&#xff0c;作为 Vite 的双引擎之一&#xff0c;Esbuild 在很多关键的构建阶段(如依赖预编译、TS 语法转译、代码…...

前端技能包

ES6 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><script>// 变量定义var a1;let b5; // 现在使用let 定义变量// 对象解构let person{&quo…...

iOS 抖音导航栏首页一键分两列功能的实现

要实现 iOS 抖音首页导航栏的“一键分两列”功能&#xff08;通常指将单列内容切换为双列瀑布流布局&#xff09;&#xff0c;需结合自定义导航栏控件与布局动态切换逻辑。以下是关键实现步骤和技术要点&#xff0c;基于 iOS 原生开发框架&#xff08;Swift/Objective-C&#x…...

OpenJudge | 大整数乘法

总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积。 输入 有两行&#xff0c;每行是一个不超过200位的非负整数&#xff0c;没有多余的前导0。 输出 一行&#xff0c;即相乘后的结果。结果里不能有多余的前导0&#xff0c;即如果结果是342&am…...

数据结构与算法——二叉树高频题目(1)

前言&#xff1a; 简单记录一下自己学习算法的历程&#xff0c;主要根据左老师自己的视频课进行&#xff0c;由于大部分课程涉及题目较多&#xff0c;所以分文章进行记录。 本文将简单记录一下二叉树的层序遍历和 Z 形层次遍历。 参考视频&#xff1a; 算法讲解036【必备】…...

软件更新机制的测试要点与稳定性提升

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

Go深入学习延迟语句

1 延迟语句是什么 编程的时候&#xff0c;经常会需要申请一些资源&#xff0c;比如数据库连接、文件、锁等&#xff0c;这些资源需要再使用后释放掉&#xff0c;否则会造成内存泄露。但是编程人员经常容易忘记释放这些资源&#xff0c;从而造成一些事故。 Go 语言直接在语言层…...

【系统架构设计师】绪论-系统架构概述

目录 绪论 系统架构概述 单选题 绪论 系统架构概述 单选题 1、软件方法学是以软件开发方法为研究对象的学科。其中&#xff0c;&#xff08;&#xff09;是先对最高居次中的问题进行定义、设计、编程和测试&#xff0c;而将其中未解决的问题作为一个子任务放到下一层次中去…...

WEB3技术重要吗,还是可有可无?

我从几个角度给你一个全面、理性、技术导向的回答&#xff1a; ✅ 一、Web3 技术的重要性&#xff1a;“有意义&#xff0c;但不是万能” Web3 技术并不是可有可无的噱头&#xff0c;而是一种在特定场景下提供独特价值的技术体系。 它重要的原因包括&#xff1a; 1. 重构数字…...

【MySQL系列】MySQL 导出表数据到文件

博客目录 一、使用 SELECT INTO OUTFILE 语句基本语法参数详解注意事项实际示例 二、使用 mysqldump 工具基本语法常用选项实际示例 三、使用 MySQL Workbench 导出导出步骤高级选项 四、其他导出方法1. 使用 mysql 命令行客户端2. 使用 LOAD DATA INFILE 的逆向操作3. 使用编程…...