四大组件:Activity、Service、BroadcastReceiver、ContentProvider 学习

1 阅读3分钟

四大组件:Activity、Service、BroadcastReceiver、ContentProvider

Android 四大核心组件,是 App 与系统交互的入口,全部需要在 AndroidManifest.xml 清单文件中声明

一、Activity(活动)

负责页面、UI 交互,用户看得见的界面

  1. 作用:展示视图、接收用户操作事件,一个页面 ≈ 一个 Activity

  2. 生命周期(7 个回调)

    • onCreate():创建初始化,只执行一次
    • onStart():可见,但不可交互
    • onResume():可见 + 可交互,前台运行
    • onPause():失去焦点,部分遮挡
    • onStop():完全不可见
    • onRestart():从停止重新启动
    • onDestroy():销毁回收资源
  3. 启动方式

    • 显式 Intent:指定目标类,应用内部跳转
    • 隐式 Intent:Action/Data,跨应用跳转
  4. 任务栈:采用后进先出,管理多个 Activity


二、Service(服务)

后台执行任务, 无 UI 界面 ,不需要和用户交互 注意:Service不会新开线程,默认运行在主线程(UI 线程)!耗时任务必须手动开子线程

两种启动模式

  1. startService()

    • 启动后独立运行,就算启动它的页面关闭,Service 仍然存活
    • 停止:stopService() / stopSelf()
    • 生命周期:onCreateonStartCommandonDestroy
  2. bindService () 绑定服务

    • 客户端‑服务端通信,可拿到 Service 的 Binder 对象,调用服务内部方法
    • 宿主解绑 (unbind) 后,Service 随之销毁
    • 生命周期:onCreateonBindonUnbindonDestroy

前台服务:显示通知栏,优先级高不容易被系统杀死(例:音乐播放)


三、BroadcastReceiver(广播接收器)

系统 / 应用发出广播,组件接收消息,做解耦通信

  1. 两种注册方式

1)静态注册(清单注册)

AndroidManifest.xml 声明 receiver,App 未启动也可以收到广播

Android8.0 以后大量隐式静态广播被限制,只能接收少数系统广播

2)动态注册(代码注册)

registerReceiver(),Activity 运行时注册;页面销毁时必须 unregisterReceiver (),防止内存泄漏。只能 App 运行时接收。 2. 广播分类

  • 普通广播:异步发送,无序,sendBroadcast()
  • 有序广播:按优先级接收,可截断 sendOrderedBroadcast()
  • 粘性广播:Android5.0 废弃

典型场景:监听开机、电量变化、网络切换、推送消息


四、ContentProvider(内容提供者)

跨进程、跨应用共享数据,安卓标准的数据访问接口

  1. 作用:对外暴露自己的数据,让别的 App 读写;封装数据(SQLite 等),提供统一访问入口
  2. 通过 Uri 定位数据
content://authority/路径/id
  1. 配套工具:ContentResolver,外部程序用来访问 ContentProvider
  2. 核心方法
query()    // 查询
insert()   // 插入
update()   // 更新
delete()   // 删除
getType()  // 返回MIME类型

例子:读取系统通讯录、相册


四大组件对比速查表

表格

组件核心用途有无 UI运行线程
Activity用户界面交互✅有 UI主线程
Service后台长时间任务❌无 UI主线程
BroadcastReceiver接收广播消息通知❌无 UI主线程
ContentProvider跨程序共享数据❌无 UIBinder 线程池

面试高频考点

  1. 四大组件都必须在清单注册,除了动态注册的广播
  2. Service 不是子线程,耗时操作需自己开 Thread / Coroutine / WorkManager
  3. Activity 销毁前,动态广播一定要解注册,否则内存泄漏
  4. ContentProvider 是跨进程通信 IPC 方案之一

如果你需要,我可以给你一份Kotlin 完整 Demo 代码示例,或者四大组件面试题合集。