【Android】活动

文章目录

一、Intent:组件间通信

Intent 是 Android 中用于组件间通信的核心工具,最常见的用途就是页面跳转。它分为两种:显式 Intent 和 隐式 Intent。

1.显式 Intent:直接点名,直达目标

显式 Intent 直接指定目标组件的类名,是我们日常开发中最常用的方式。

java 复制代码
// 参数1:当前上下文
// 参数2:目标Activity的class对象
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);

特点与适用场景

  1. 优点:简单直接,稳定可靠,不会出现匹配失败的情况。
  2. 缺点:耦合度高,必须知道目标组件的类名。
  3. 适用场景:APP 内部页面跳转。

2.隐式 Intent:不点名,按条件匹配

隐式 Intent 不直接指定目标组件,而是通过配置动作、分类、数据 等条件,让系统去匹配能响应这些条件的组件。
核心三要素:

  1. Action(动作):定义要执行的行为,比如打开网页、打电话。
  2. Category(分类):动作的附加场景,隐式 Intent 必须配置 DEFAULT 分类。
  3. Data(数据):要操作的具体内容,必须是 Uri 格式(如网址、电话)。

自定义隐式跳转

发送方代码:

java 复制代码
// 仅通过 Action 发送信号
Intent intent = new Intent("com.example.MY_ACTION");
startActivity(intent);

接收方配置:

xml 复制代码
<activity android:name=".SecondActivity">
    <intent-filter>
        <!-- 与发送方的 Action 完全匹配 -->
        <action android:name="com.example.MY_ACTION" />
        <!-- 必须配置,否则匹配失败 -->
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

调用系统功能

这里以打开系统内置浏览器为例

java 复制代码
// 参数1:系统内置 Action(查看内容)
// 参数2:要查看的网页数据(Uri格式)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"));
startActivity(intent);

细节:

🔹 category 必须加 DEFAULT :系统在调用 startActivity 时,会自动给隐式 Intent 加上 DEFAULT 分类,如果你的过滤器没写,永远匹配失败。

🔹 data 不是必须的 :普通的自定义隐式跳转不需要 data,只有操作具体资源(网页、电话、文件)时才需要。

🔹 多个 intent-filter 匹配优先级:如果有多个 Activity 能匹配同一个 Intent,系统会弹出选择框让用户选择。

🔹 intent-filter 里的标签顺序不影响匹配actioncategorydata 的顺序不影响系统的匹配结果。

隐式Intent特点与适用场景:

  • 优点:解耦,无需知道目标应用的包名和类名,可调用系统或第三方应用的功能。
  • 缺点:配置繁琐,可能出现多个应用同时响应的情况。
  • 适用场景:调用系统功能(浏览器、拨号、相册)、跨应用跳转。

二、活动的生命周期

方法 触发时机 关键作用
onCreate() 活动第一次创建,仅执行 1 次 初始化布局、控件、数据,setContentView() 写在这里。
onStart() 页面即将变为可见状态 开启动画、定位等非交互资源。
onResume() 页面获取焦点,进入可交互状态 开始播放视频、计时器等核心业务。
onPause() 页面失去焦点(被弹窗覆盖、切后台) 暂停视频、计时器,保存临时数据,不能做耗时操作。
onStop() 页面完全不可见 释放网络请求、播放器等占用大量内存的资源。
onDestroy() 页面彻底销毁(finish() 或 APP 退出) 关闭数据库、解绑监听、销毁线程,彻底回收所有资源。

补充:onRestart() 方法在页面从后台恢复可见时触发,介于 onStop()onStart() 之间,日常开发用得较少。

高频场景流程:

  • 打开页面:onCreateonStartonResume
  • 跳转新页面:旧页面 onPauseonStop;新页面 onCreateonStartonResume
  • 按返回键关闭:onPauseonStoponDestroy
  • 后台切回:onRestartonStartonResume

三、活动的启动模式

Activity 是以任务栈的方式管理的,启动模式就是控制 Activity 如何入栈、是否复用实例。

1. standard(标准模式,默认)

  • 规则:每次跳转都新建一个实例,直接压入栈顶。
  • 特点:简单粗暴,可能导致栈内存在多个相同 Activity 实例。
  • 适用场景:普通详情页、二级页面。

2. singleTop(栈顶复用)

  • 规则:如果目标 Activity 已经在栈顶,则复用当前实例,不新建;否则新建。
  • 触发复用 :会调用 onNewIntent(),不会重新走 onCreate
  • 适用场景:防止连续打开多个相同顶部页面,如首页、聊天窗口。

3. singleTask(栈内唯一)

  • 规则:整个任务栈内只能有一个该 Activity 实例。如果已存在,会清空它上面所有 Activity,将其置顶。
  • 特点:常用于从多级页面一键返回首页。
  • 适用场景:APP 的首页(MainActivity)。

4. singleInstance(全局唯一独立栈)

  • 规则:单独开辟一个全新的、只存放它自己的任务栈,全局唯一。
  • 特点:跨 App 单例,系统级应用。
  • 适用场景:系统级弹窗、来电界面,日常开发几乎不用。

四、总结

  • Intent 是组件间通信的信使,显式用于内部跳转,隐式用于跨应用或系统功能调用。
  • 生命周期 管理 Activity 的状态变化,核心是成对的初始化和资源释放。
  • 启动模式 控制 Activity 在任务栈中的行为,核心是实例复用和栈内顺序。
相关推荐
yv_302 小时前
XXE漏洞
android
小脑斧1238 小时前
安卓专属|青禾去水印 APP 免费无广告 多媒体素材处理工具
android
菜鸟国国9 小时前
一步到位学 Compose + Paging3:从 0 到 1 实现分页加载(超详细新手教程)
android
TO_ZRG9 小时前
Android Service基础
android
ECT-OS-JiuHuaShan11 小时前
功夫不负匠心人,渡劫代谢舞沧桑
android·开发语言·人工智能·算法·机器学习·kotlin·拓扑学
ZC跨境爬虫12 小时前
移动端爬虫工具Fiddler完整配置流程:PC+安卓模拟器全覆盖,零基础一次配置成功
android·前端·爬虫·测试工具·fiddler
巴德鸟12 小时前
DaVinci 常用技巧 关键帧 自动字幕 追踪 音频 冻结帧 快捷键 多轨道字幕 扩充边缘
android·编辑器·音视频·视频·davinci·davin
学习使我健康13 小时前
Android 广播介绍详情
android·开发语言·kotlin