ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Android Activity 完全指南:单屏组件、生命周期与导航机制

Android Activity 完全指南:单屏组件、生命周期与导航机制 文档教程知识库【免费下载链接】developer-roadmapInteractive roadmaps, guides and other educational content to help developers grow in their careers.项目地址https://gitcode.com/GitHub_Trending/de/developer-roadmap点击查看免费下载Activity 是 Android 应用中带有用户界面的单个屏幕也是几乎所有 App 交互的起点。本文以 developer-roadmap 仓库的 Android 路线图 为骨架系统讲解 Activity 的定义与职责、由操作系统托管的生命周期回调、任务与返回栈的导航机制以及通过 Intent 启动 Activity 的显式/隐式两种方式帮助你理解并正确处理这一核心组件构建稳定可靠的应用。读完本文你将掌握Activity 在 Android 四大组件中的定位、六大生命周期回调的执行时机与正确用法、多屏导航与返回栈行为、显式与隐式 Intent 的启动方式以及 Fragment、Jetpack Navigation 等现代实践对 Activity 开发方式的演进。Activity 是什么Android 应用中的单屏在 Android 的组件模型里Activity 代表应用中一个带有用户界面的单个屏幕single screen。它是用户与 App 交互的基本单元——用户看到的登录页、列表页、详情页通常都是一个 Activity。Activity 的核心特征可以从三个方面理解一个 Activity 对应一个屏幕每个 Activity 承载一套独立的界面与交互逻辑可以独立启动、独立销毁应用由多个 Activity 组成App 通常包含多个 Activity用户在它们之间导航切换形成完整的业务流程生命周期由操作系统管理Activity 从创建到销毁要经历一系列由系统调度、开发者无法完全控制的状态变迁正确处理这些状态是构建稳定应用的前提。这也是 Android 路线图将 Activity 列为 Android 开发者必修基础的原因——它是理解整个应用架构的入口。Activity 在应用组件体系中的位置Android 应用并非只有 Activity 一种构建块。按照 App Components 文档的划分四大核心组件各司其职且每一种都有自己的生命周期都由 Android 系统统一托管组件职责是否有界面Activity呈现单个用户界面屏幕承载交互有Service在后台执行耗时任务播放音乐、下载文件、处理数据无用户界面无Broadcast Receiver响应系统级或应用级广播事件无Content Provider管理结构化数据的访问跨应用共享数据无Activity 是其中唯一看得见摸得着的交互组件用户看到的界面、点击、滚动都发生在 Activity 的视图层级中。而 Service 用于处理用户不直接感知的后台任务如播放音乐、下载文件Content Provider 则用于跨应用共享数据如系统通讯录、日历、媒体库都是通过内容提供者暴露数据的。理解这一分工很重要不要把所有逻辑都塞进 Activity。界面展示交给 Activity后台任务交给 Service跨进程数据共享交给 Content Provider这样每个组件的生命周期职责才清晰可控。Activity 生命周期状态与回调Activity 生命周期是 Activity从创建到销毁经历的一组状态与回调集合。这是 Activity 机制中最关键的部分也是 Activity LifeCycle 文档反复强调的重点。六大核心回调生命周期涉及的关键回调包括onCreateActivity 首次创建时调用。在这里完成界面布局、初始化成员变量、绑定数据等一次性设置onStartActivity 即将对用户可见时调用onResumeActivity 获得焦点、可以接收用户输入时调用是应用与用户交互的主要状态onPauseActivity 部分可见、即将失去焦点时调用例如有对话框弹出或新 Activity 启动onStopActivity 完全不可见时调用onDestroyActivity 被销毁前调用用于释放资源。为什么正确实现回调如此重要生命周期回调的价值在于让应用优雅地应对系统随时可能触发的中断。最典型的场景是电话呼入来电界面会覆盖当前 Activity触发 onPause → onStop应用需要在这里保存未提交的用户输入、暂停动画或释放独占资源屏幕旋转配置变化默认会导致 Activity 销毁并重建整个过程会走完 onPause → onStop → onDestroy再重新走 onCreate → onStart → onResume如果不在 onSaveInstanceState 等时机保存状态旋转后用户填写的表单数据就会丢失后台切换用户按 Home 键切到其他应用Activity 进入 stopped 状态但进程仍存活需要确保资源占用合理、数据安全。正确实现这些回调能确保应用在处理电话呼入、屏幕旋转等中断时不会丢失数据、不会崩溃、不会出现资源泄漏。反过来说如果开发者忽略生命周期处理最常见的后果就是界面状态在旋转后消失、后台任务在 Activity 销毁后仍在占用资源、内存泄漏导致应用被系统回收。多 Activity 导航任务与返回栈一个应用通常包含多个 Activity用户在它们之间前进、后退形成完整的操作流。支撑这套导航行为的底层机制是任务Task与返回栈Back Stack。按照 Tasks Backstack 文档的说明任务是用户为达成某个目标而交互的一组 Activity 的集合返回栈记录这些 Activity 被打开的顺序当用户按下返回键时Activity按相反顺序从栈中弹出后进先出。举例来说用户从列表页 A 点击进入详情页 B再进入编辑页 C返回栈自底向上为 A → B → C。此时按返回键先弹出 C 回到 B再弹出 B 回到 A。栈空时返回键会退出应用或回到上一个任务。理解任务与返回栈对构建可预测的导航流程至关重要返回行为是否符合用户直觉例如从详情页返回应回到列表页而不是退出应用使用launchMode如 singleTop、singleTask或 Intent flag如 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP控制 Activity 在栈中的复用与清理行为深链接deep link从外部直接打开栈内深处的页面时返回路径如何构造。用 Intent 启动 ActivityActivity 之间如何通信与跳转答案是Intent意图。按照 Intent 文档的定义Intent 是 Android 中用于组件之间运行时晚期绑定late runtime binding的软件机制可用于 Activity、Content Provider、Service 等组件。它本质上是一个被动的数据结构保存着对某项操作的抽象描述请求 Android 系统去执行。Intent 本身不执行任何操作它只是描述要做的事真正干活的是系统与目标组件。根据是否显式指定目标组件Intent 分为两种显式 IntentExplicit Intent显式 Intent 主要用于应用自身边界内部同一 App 内的组件跳转。它明确指定要响应该 Intent 的目标组件调用方式包括setComponent(ComponentName)setClass(Context, Class)setClassName(String, String)由于目标已写死显式 Intent 不需要系统解析直接交给 Intent 中指定的那个组件处理。典型用法就是在 App 内部启动某个 Activity、启动 Service、发送广播// 启动同一应用内的另一个 Activity Intent intent new Intent(this, DetailActivity.class); startActivity(intent);对应 Kotlin 写法为Intent(this, DetailActivity::class.java)本质同样是调用setClass语义指定目标组件。这部分内容在 Explicit Intents 文档中有详细说明。隐式 IntentImplicit Intent隐式 Intent 不显式指定目标组件而是描述想做什么由系统去查找合适的组件来响应请求。系统会拿设备上所有已安装应用在AndroidManifest.xml中声明的intent-filter与该隐式 Intent 进行匹配找到能够处理它的 Activity或 Service、Receiver。典型场景是打开一个网页调用相机拍照分享文本等跨应用操作——你的 App 不需要知道谁来实现系统会找到最合适的那个// 打开网页不指定浏览器由系统匹配安装了浏览器的应用 Intent intent new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(https://example.com)); startActivity(intent);隐式 Intent 的核心价值在于解耦发起方只声明意图action、data、category接收方通过清单文件声明自己能处理什么双方无需互相认识。详细机制见 Implicit Intents 文档。Manifest 注册与 Intent Filter无论哪种组件要能被系统识别都必须先在AndroidManifest.xml中声明。对于 Activity 而言注册至少需要application activity android:name.MainActivity / activity android:name.DetailActivity !-- intent-filter 声明该 Activity 能响应的隐式 Intent -- intent-filter action android:nameandroid.intent.action.VIEW / category android:nameandroid.intent.category.DEFAULT / data android:schemehttps / /intent-filter /activity /application其中Intent Filter 用于声明组件能接收哪些类型的 Intent。按照 Intent Filters 文档它定义在AndroidManifest.xml中描述组件支持的action组件能执行的动作如 ACTION_VIEW、ACTION_SENDdata组件能处理的 URI 类型与 MIME 类型category组件的分类信息如 DEFAULT、BROWSABLE。系统正是依靠这些 intent-filter 声明来判断哪些 Activity 或 Service 能响应某个隐式 Intent。如果一个组件没有任何 intent-filter它只能被显式 Intent 或同应用内的隐式调用启动如果多个应用声明了能处理同一 Intent系统会弹出选择应用对话框让用户决定或由系统按默认偏好处理。现代实践Fragment、Navigation Components 与 Compose理解了 Activity 的基础机制后还需要了解它在现代 Android 开发中的演进形态——这同样是路线图 Android 开发基础 之后的重要内容。Fragment可复用的界面片段Fragment 代表应用中可复用的 UI 片段它定义并管理自己的布局、拥有自己的生命周期、能处理自己的输入事件。关键约束是Fragment 不能独立存在必须由 Activity 或其他 Fragment 托管Fragment 的视图层级会作为或挂载到宿主视图层级的一部分。Fragment 让一个 Activity 可以在不同屏幕尺寸下复用界面模块例如手机上一屏显示一个 Fragment平板上同一 Activity 并排显示两个 Fragment。不过 Fragment 也有自己的生命周期与宿主的生命周期需要联动处理。详见 Fragments 文档。Jetpack Navigation Components导航的标准化Navigation Components 是 Android Jetpack 的一部分用于简化应用内导航的实现。按照 Navigation Components 文档它帮助你遵循最佳实践、处理深链接、在深层与条件导航中提供一致的体验并自动处理许多常见任务如在不同设备上正确处理 Up 与 Back 行为。它由三个关键部分组成Navigation graph以 XML 资源描述导航关系图哪些目的地、如何跳转NavHost承载导航内容的容器通常就是宿主 Activity 里的一个 Fragment 容器NavController在 NavHost 中管理目的地之间的跳转与状态。在实际项目中常见组合是一个 MainActivity 作为 NavHost 容器内部用多个 Fragment 作为导航目的地由 NavController 管理跳转。此时 Activity 的单屏职责被进一步抽象——它更多是容纳导航的宿主具体界面由 Fragment 呈现。Jetpack Compose 与 Activity如果使用 Jetpack Compose声明式 UI 方案路线图中也有对应的 jetpack-compose 专题Activity 依然存在但职责更纯粹在onCreate中调用setContent挂载 Compose 界面树屏幕内容由 Composable 函数描述导航由 Compose Navigation 处理。无论技术栈如何演进Activity 作为界面宿主的地位、生命周期机制和启动方式这些基础概念都不会过时。学习与实践建议如果你刚开始接触 Activity建议按以下路径推进与 Android 路线图 的编排一致打好基础掌握 Kotlin/Java 基础、面向对象 与 Gradle 构建动手写第一个 App参考 Create a Basic Hello World App在 Android Studio 中新建项目、编写一个简单 Activity、在模拟器或真机上运行理解项目结构、构建流程与 UI 和代码的连接方式吃透生命周期亲手在六个回调中打日志观察打电话、旋转屏幕、按 Home 键时回调的触发顺序理解导航用显式 Intent 做多屏跳转再对照 Tasks Backstack 验证返回行为再引入 Fragment 与 Navigation Components最后过渡到 Compose 或 MVVM 等架构模式。小结Activity 是 Android 应用最基础的交互单元一个屏幕、一套界面、一个由操作系统托管的生命周期。本文围绕 developer-roadmap 的 Android 路线图 梳理了它的完整知识链条——从组件定位Activity、Service、Broadcast Receiver、Content Provider 四大组件、六大生命周期回调的正确处理到任务与返回栈的导航机制、显式/隐式 Intent 的启动方式与 Manifest 中的 intent-filter 声明再到 Fragment 与 Navigation Components 的现代实践。把握住生命周期由系统管理、正确回调避免数据丢失、Intent 是组件间通信的抽象描述这三条主线你就能搭建出稳定、可预测、经得起系统中断考验的 Android 应用并顺畅地进入 Fragment、Compose、架构模式等后续学习阶段。赞分享文档教程知识库【免费下载链接】developer-roadmapInteractive roadmaps, guides and other educational content to help developers grow in their careers.项目地址https://gitcode.com/GitHub_Trending/de/developer-roadmap点击查看免费下载相关推荐Playwright 导航机制详解goto、waitForURL、BFCache 与导航生命周期事件Playwright 导航机制详解goto、waitForURL、BFCache 与导航生命周期事件 Playwright 的页面导航Navigation测试开发工具浏览器控制Android Activity生命周期掌握应用运行机制的终极指南Android Activity生命周期掌握应用运行机制的终极指南 Activity生命周期是Android开发中最重要的概念之一它决定了应用如何响应用户交示例工程教程移动开发Koin Android Scope 完全指南用 Activity / Fragment / ViewModel 生命周期管理依赖Koin Android Scope 完全指南用 Activity / Fragment / ViewModel 生命周期管理依赖 导读 本文聚焦 Koin后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表