【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 里的标签顺序不影响匹配 :action、category、data 的顺序不影响系统的匹配结果。

隐式Intent特点与适用场景:

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

二、活动的生命周期

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

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

高频场景流程:

  • 打开页面:onCreate → onStart → onResume
  • 跳转新页面:旧页面 onPause → onStop;新页面 onCreate → onStart → onResume
  • 按返回键关闭:onPause → onStop → onDestroy
  • 后台切回:onRestart → onStart → onResume

三、活动的启动模式

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

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

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

2. singleTop(栈顶复用)

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

3. singleTask(栈内唯一)

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

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

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

四、总结

  • Intent 是组件间通信的信使,显式用于内部跳转,隐式用于跨应用或系统功能调用。
  • 生命周期 管理 Activity 的状态变化,核心是成对的初始化和资源释放。
  • 启动模式 控制 Activity 在任务栈中的行为,核心是实例复用和栈内顺序。
相关推荐
逗脑IDE34 分钟前
零基础学ESP32:蓝牙控制舵机——手机一点,舵机就转!
android·智能手机
清霜之辰1 小时前
骁龙 8397 舱驾融合平台端侧大模型部署:7B 模型本地推理与 64GB 内存账本
android
烽火聊员1 小时前
Android屏幕卡顿traces.txt拉取查看
android·java·android studio
只睡四小时3 小时前
JS 手写 D-pad 空间导航:电视端焦点引擎实战
android·开发语言·前端·javascript·ecmascript·hls·空间导航
恋猫de小郭3 小时前
Android 原生的 Compose A2UI 也来了,你还抱着 XML 养老吗?
android·前端·flutter
程序媛_3 小时前
【JMeter】准备token文件
android·jmeter
维克兜率天3 小时前
【维克】弹性策略:用“乖离率“捕捉超跌反弹
android·开发语言·python·深度学习·kotlin·量化
古法安卓4 小时前
Android-Ext4文件系统问题排查
android·java·android studio
传奇开心果编程6 小时前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
生如夏花爱学习229667 小时前
贴心使用的语音生活小助手
android