Android四大组件总结

Android 四大组件总结

整理日期:2026-07-30

四大组件:ActivityServiceBroadcastReceiverContentProvider

均需在 AndroidManifest.xml 中声明(部分动态注册广播除外)


目录

  • [1. 总览](#1. 总览)
  • [2. Activity(活动)](#2. Activity(活动))
  • [3. Service(服务)](#3. Service(服务))
  • [4. BroadcastReceiver(广播接收器)](#4. BroadcastReceiver(广播接收器))
  • [5. ContentProvider(内容提供者)](#5. ContentProvider(内容提供者))
  • [6. 组件通信与 Intent](#6. 组件通信与 Intent)
  • [7. Manifest 与安全要点](#7. Manifest 与安全要点)
  • [8. 生命周期对照](#8. 生命周期对照)
  • [9. 选型速查](#9. 选型速查)
  • [10. 优缺点总览](#10. 优缺点总览)
  • [11. 参考链接](#11. 参考链接)

1. 总览

组件 作用 有界面 典型启动方式
Activity 用户交互界面与页面 startActivity / 系统启动
Service 后台执行长时间任务 startService / bindService / FGS
BroadcastReceiver 响应系统或应用广播事件 静态/动态注册后收 Intent
ContentProvider 跨应用/跨进程共享结构化数据 ContentResolver 查询操作

共性:

  • 由系统调度,生命周期不由业务代码完全掌控
  • 通过 Intent(及 Binder / ContentResolver)协作
  • Android 8+ 起后台、隐式广播、导出安全限制持续收紧

2. Activity(活动)

2.1 职责

  • App 的 UI 入口与页面容器(窗口 + 生命周期)
  • 一个界面通常对应一个 Activity(现代项目多用 单 Activity + 多 Fragment / Compose Navigation

2.2 生命周期(简)

复制代码
onCreate → onStart → onResume  ⟵  可见可交互
                ↓
            onPause → onStop → onDestroy
                ↕
            onRestart(从 stop 回到前台)
回调 时机
onCreate 首次创建,初始化 UI
onStart 即将可见
onResume 获得焦点,可交互
onPause 失去焦点(如半透明遮挡)
onStop 完全不可见
onDestroy 销毁,释放资源
onSaveInstanceState 可能被杀前保存临时 UI 状态

配置变更(旋转等)默认可能销毁重建;可用 ViewModel + 状态保存,或 configChanges / Compose 状态处理。

2.3 启动模式(launchMode)

模式 含义
standard 默认,每次新建实例
singleTop 栈顶已是该 Activity 则复用,走 onNewIntent
singleTask 任务栈内复用,其上实例出栈
singleInstance 独占任务栈(少用,如桌面类)

另有 Intent Flag:FLAG_ACTIVITY_NEW_TASKCLEAR_TOP 等。

2.4 现代实践

  • UI:Jetpack Compose / View + Fragment
  • 结果回调:Activity Result API(替代 startActivityForResult
  • 后台启动 Activity:Android 10+ 严格限制
  • 大屏 / 边到边 / 预测性返回:随 targetSdk 强制适配

3. Service(服务)

3.1 职责

  • 无界面的后台组件,执行下载、播放、同步等
  • 不等于"保证一直在后台跑":受后台执行限制、Doze、厂商策略约束

3.2 类型

类型 说明
Started Service startService / startForegroundService,独立生命周期,需自行 stopSelf
Bound Service bindService,客户端通过 Binder 通信,无绑定时可销毁
混合 可同时 start + bind
Foreground Service (FGS) 必须持续通知;Android 8+ 后台启动受限;14+ 必须声明 foregroundServiceType
IntentService(已废弃) 改为 JobIntentService(也偏旧)或 WorkManager / 协程

3.3 生命周期(Started)

复制代码
onCreate → onStartCommand → ... → onDestroy

Bound 额外:onBind / onUnbind / onRebind

onStartCommand 返回值:

返回值 含义
START_STICKY 被杀后尝试重建,Intent 为 null
START_NOT_STICKY 被杀不重建(除非有挂起 Intent)
START_REDELIVER_INTENT 被杀后重建并重传最后 Intent

3.4 现代替代

场景 更推荐
延时/条件任务、可延期 WorkManager
精确闹钟 AlarmManager + 权限策略
音乐/导航/通话等用户可知晓任务 FGS(正确 type + 通知)
短时后台 协程 / 线程,注意进程优先级

4. BroadcastReceiver(广播接收器)

4.1 职责

  • 监听 系统或应用发出的广播事件(开机、网络变化、自定义业务事件等)
  • 回调在主线程,onReceive禁止长耗时;耗时应转 Service / 协程 / WorkManager

4.2 注册方式

方式 特点
静态注册(Manifest) 可在未启动时唤醒(受隐式广播限制)
动态注册Context.registerReceiver 灵活,随组件生命周期;Android 14+ 须指定 RECEIVER_EXPORTED / NOT_EXPORTED

4.3 限制(务必知道)

  • Android 8+:大部分隐式广播不能静态注册(有白名单例外)
  • 自定义广播优先 显式 Intent (指定组件/包名)或 LocalBroadcast 已废弃 → 用 Flow / LiveData / EventBus 慎用 / 进程内回调
  • 有序广播、粘性广播:能力保留但场景减少
  • Android 13+ 通知等相关行为变化;SMS OTP 等系统广播在高版本进一步收紧

4.4 生命周期

极短:onReceive 执行期间对象有效,返回后即可销毁。

勿在 Receiver 内异步"裸开线程"后结束(进程可能被回收);用 goAsync()(谨慎)或转交前台/Work。


5. ContentProvider(内容提供者)

5.1 职责

  • URI 形式对外提供数据读写(SQLite、文件、内存等)
  • 系统大量使用:通讯录、媒体库、设置等
  • App 内也可用 Provider 做模块解耦或 FileProvider 分享文件

5.2 核心方法

方法 作用
query 查询
insert 插入
update 更新
delete 删除
getType MIME 类型
call(可选) 自定义 RPC 风格调用

客户端通过 ContentResolver 访问,不直接持有 Provider 实例(跨进程由系统 Binder 调度)。

5.3 URI 约定

复制代码
content://authority/path/id

例:content://com.example.app.provider/items/42

authority 全局唯一,通常用应用包名风格。

5.4 权限与安全

  • android:exported:是否对外暴露
  • readPermission / writePermission / grantUriPermissions
  • FileProvider :安全分享私有目录文件(替代 file://
  • Android 11+ 包可见性影响查询其他 App Provider 的能力

5.5 线程

  • Provider 方法常在 Binder 线程池调用,注意同步与线程安全
  • 耗时查询勿阻塞;大数据量注意分页与取消

6. 组件通信与 Intent

复制代码
Activity  ←─ startActivity / Result API ─→  Activity
Activity  ←─ start/bind Service ────────→  Service
任意组件  ←─ sendBroadcast ─────────────→  BroadcastReceiver
任意组件  ←─ ContentResolver ───────────→  ContentProvider
跨进程    ←─ AIDL / Messenger / Binder ─→  Service
Intent 类型 说明
显式 指定组件类名,应用内推荐
隐式 靠 action/category/data 匹配;对外需 intent-filter,且注意 exported 与匹配规则(Android 12+ 更严)

四大组件 不是 普通 Java 对象:new Activity() 无效,必须由系统创建。


7. Manifest 与安全要点

所有四大组件(除部分动态 Receiver)需声明,例如:

xml 复制代码
<activity android:name=".MainActivity" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<service
    android:name=".SyncService"
    android:exported="false"
    android:foregroundServiceType="dataSync" />

<receiver
    android:name=".BootReceiver"
    android:exported="true">
    <!-- 注意隐式广播白名单限制 -->
</receiver>

<provider
    android:name=".data.AppProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false" />
版本相关 要求
Android 12+ 含 intent-filter 的组件必须显式 android:exported
Android 14+ 动态 Receiver 必须指定导出标志;FGS 必须声明类型
通用 最小导出面;敏感 Provider 加权限;分享文件用 FileProvider

8. 生命周期对照

组件 生命周期特点
Activity 完整可见性状态机;可重建;与任务栈绑定
Service 创建后可长期存在(受系统限制);start/bind 路径不同
BroadcastReceiver 几乎瞬时;onReceive 结束即可能销毁
ContentProvider 随进程;首次被访问时创建;方法按需调用

进程优先级(由高到低大致):前台 Activity > 可见 Activity > 前台服务 > Service/后台 > 空进程。组件状态影响进程是否被杀。


9. 选型速查

需求 用什么
展示页面、用户操作 Activity(或 Compose 目的地)
用户可感知的持续任务(音乐、导航) Foreground Service
可延期后台工作 WorkManager(不必强行自建 Service)
系统/跨应用事件通知 BroadcastReceiver(优先动态 + 显式)
跨应用共享数据 / 安全分享文件 ContentProvider / FileProvider
应用内模块传数据 仓库层 / DI,不必强上 Provider

10. 优缺点总览

Activity

优点 官方 UI 入口;生命周期与系统窗口管理成熟;生态工具全
缺点 重建与状态保存易踩坑;多 Activity 栈管理复杂;后台启动受限

Service

优点 适合持续任务与跨界面逻辑;FGS 可提高优先级
缺点 后台限制多;易被杀;FGS 类型/超时/权限政策逐年变严

BroadcastReceiver

优点 解耦事件通知;可响应系统事件
缺点 隐式静态广播大量禁用;onReceive 短时;滥用导致难调试

ContentProvider

优点 标准化跨进程数据接口;权限模型清晰;FileProvider 实用
缺点 实现与调试成本高;URI/权限设计不当有安全风险;简单 App 内场景常过重

11. 参考链接


一句话: Activity 管界面,Service 管后台任务(能用 WorkManager 就别硬撑),BroadcastReceiver 管短事件,ContentProvider 管标准化数据共享;四者都由系统创建,并用 Intent / Resolver 协作,同时必须按现行后台与导出安全规则声明。

相关推荐
码农coding16 小时前
android16 SystemUI之StatusBar启动
android
朱涛的自习室16 小时前
一个 7 x 24 小时为你打工的 AI,Munk AI 开始内测
android·前端·人工智能
李斯维17 小时前
腾讯 Mars XLog 日志框架的编译和修改
android
2501_9160088917 小时前
iOS IPA文件反编译与打包操作方法,拆包分析防护和加固打包
android·macos·ios·小程序·uni-app·cocoa·iphone
summerkissyou198717 小时前
Android16-性能-Perfetto的pbtxt 完整配置大全
android·性能
summerkissyou198718 小时前
Android-性能-Android Studio 2025 Profiler-教程
android·性能
小白说大模型20 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·java·人工智能·windows·python
小小勇气大爆发20 小时前
Android17适配总结
android
开源推荐官21 小时前
getInvoice 是回填不是开票,Tigshop开源商城发票接口理一理
android·开源·php