当前位置: 首页 > news >正文

Android四大组件之Servers、BroadcastReceiver、ContentProvider(内容提供者)

二、Service(服务)

1 什么是Service?

你可以把Service想象成一个"后台默默打工的工人"。它没有UI界面,默默地在后台干活,比如播放音乐、下载文件、处理网络请求等。即使你退出了App,Service也可以继续运行。

举个栗子:

  1. 你在听QQ音乐时,切换到微信聊天,音乐还在播放,这就是Service在后台工作。
  2. 你在应用商店下载王者荣耀时,即使你退出了应用商店,下载任务仍然在继续,这也是Service的功劳。

简单总结就是:Service就是一个无界面的后台组件,用来执行需要长期运行的操作。


2 Service的生命周期

Service有两种主要类型:

1. Started Service(启动式Service)
  • 特点:通过startService()启动,会一直运行,直到任务完成或调用stopSelf()。
  • 适用场景:执行一次性任务,比如下载文件、播放音乐。
  • 生命周期:onCreate() -> onStartCommand() -> onDestroy()。
2. Bound Service(绑定式Service)
  • 特点:通过bindService()启动,允许多个组件(比如Activity)绑定到同一个Service。当所有组件解绑后,Service会被销毁。
  • 适用场景:提供长期服务,比如后台计算、数据同步。
  • 生命周期:onCreate() -> onBind() -> onUnbind() -> onDestroy()。

 

三、BroadcastReceiver(广播接收器)

1 什么是BroadcastReceiver

你可以把广播接收器想象成一个"收音机"。它的作用是监听系统或应用发出的"广播消息",并在收到消息后执行相应的操作。
举个例子:

  • 手机电量低了,系统检测到了,会发出一个"低电量"的广播,广播接收器可以接收到这个消息,并提醒你充电。
  • 你下载了一个App,下载完成后,系统会发出一个"下载完成"的广播,广播接收器可以接收到这个消息,并通知你安装。

简单来说,广播接收器就是用来接收和处理广播消息的组件。


2 BroadcastReceiver的类型

广播分为两种类型:

(1)系统广播

  • 特点:由系统发出,比如电池电量低、网络状态变化、屏幕开关等。
  • 比如:

ACTION_BATTERY_LOW:电池电量低。

ACTION_BOOT_COMPLETED:设备启动完成。

(2)自定义广播

  • 特点:由应用发出,用于应用内部或应用之间的通信。
  • 比如:

在App中定义一个广播,比如"任务完成",然后在其他地方接收并处理。


3 BroadcastReceiver的注册方式

广播接收器可以通过两种方式注册:

1. 静态注册
在 AndroidManifest.xml 中声明,应用未运行时也能接收广播。
适用场景:监听系统广播,比如设备启动完成。
示例:

 
XML复制代码
<receiver android:name=".MyReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter>
</receiver>

2. 动态注册
在代码中通过registerReceiver() 注册,通常用于应用运行时接收广播。
适用场景:监听应用内部的广播,比如用户点击按钮后发出的广播。
示例:

 
java复制代码
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
registerReceiver(myReceiver, filter);

4 BroadcastReceiver的生命周期

广播接收器的生命周期非常简单,主要包括以下两个阶段:

  1. 接收广播:当广播发出时,系统会创建广播接收器的实例,并调用它的onReceive()方法。
  2. 完成任务:onReceive()方法执行完毕后,广播接收器的实例就会被销毁。

也就是说,广播接收器的生命周期非常短暂,它只存在于接收到广播并处理完广播的这段时间内。

5 BroadcasReceiver的工作流程

BroadcastReceiver的核心类是android.content.BroadcastReceiver,一个抽象类

 
java复制代码
public abstract class BroadcastReceiver {// 核心方法,用于接收广播public abstract void onReceive(Context context, Intent intent);// 其他方法,比如设置结果、获取结果等public final void setResultCode(int code) { ... }public final int getResultCode() { ... }public final void setResultData(String data) { ... }public final String getResultData() { ... }public final void setResultExtras(Bundle extras) { ... }public final Bundle getResultExtras(boolean makeMap) { ... }
}

......

通过分析源码,可以总结出广播接收器的工作流程

(1)注册广播接收器

  • 静态注册:由PackageManagerService解析AndroidManifest.xml并注册。
  • 动态注册:通过Context.registerReceiver()注册到ActivityManagerService。

(2)发送广播

  • 通过Context.sendBroadcast()发送广播,ActivityManagerService负责分发。

(3)分发广播

  • BroadcastQueue从队列中取出广播,并调用广播接收器的onReceive()方法处理。

(4)处理广播

  • 广播接收器的onReceive()方法运行在主线程中,不能执行耗时操作。

四、ContentProvider(内容提供者)

1 什么是ContentProvider?

ContentProvider其实就是应用间的"数据共享桥",是管理跨应用访问的组件,通过URI来标识数据。

举个栗子:

你手机里的通讯录,存储了所有联系人的信息。如果你想把这些联系人信息分享给其他App,就可以通过ContentProvider来实现。

简单来说,ContentProvider就是用来共享和管理数据的组件。

2 ContentProvider的特点

  1. 数据共享:ContentProvider可以让不同应用之间共享数据。比如,通讯录App可以通过ContentProvider将联系人信息共享给其他App。
  2. 统一接口:ContentProvider提供了一套标准化的接口(比如query()、insert()、update()、delete()),其他应用可以通过这些接口访问数据。
  3. 数据安全:ContentProvider可以通过权限控制来保护数据。比如,你可以设置只有特定应用才能访问你的数据。

3 ContentProvider的核心方法

ContentProvider的核心方法包括:

query():查询数据。
insert():插入数据。
update():更新数据。
delete():删除数据。
getType():返回数据的MIME类型。

五、总结

Android四大组件是构建一个APP的核心模块,分工明确:

  1. Activity:负责展示用户界面,就像App的一个个"页面",用户通过它与应用交互。
  2. Service:在后台默默干活的打工人,比如播放音乐或下载文件,没有界面但能长时间运行。
  3. BroadcastReceiver:像"收音机"一样接收系统或应用发出的广播消息,比如电量低或网络变化,然后做出响应。
  4. ContentProvider:是"数据管家",管理应用的数据并提供统一接口,让其他应用也能访问这些数据。

一言以概之,Activity管界面,Service管后台,BroadcastReceiver管消息,ContentProvider管数据。

http://www.hskmm.com/?act=detail&tid=32295

相关文章:

  • 2025年智能装备与机器人国际学术会议(IER 2025)
  • 编程计算定投黄金的收益率
  • 客户管理软件是什么?深度解析及标杆产品推荐
  • openresty开发lua-resty-openssl之rsa公钥加密私钥解密 - liuxm
  • 2025年6款主流CRM系统详解
  • 动手动脑及实验性问题总结
  • 华为云rds pg 11升级17
  • 盘点2025破碎仪厂家/提供研磨处理方案的厂家
  • 全球顶尖的医疗器械CRM软件(深度对比)
  • uni-app x开发商城系统,tabBar
  • Delphi TscGPPageControl动态创建新页面与加载Frame框架
  • 静态方法访问类的实例成员
  • 2025年冷冻研磨仪厂家,研磨仪厂家排行,知名品牌介绍
  • 组织研磨仪厂家品牌推荐/知名品牌,组织研磨仪哪家好?
  • The World of Torrents (How it Works?)
  • 进口微量粘度计代理商推荐,优质供应商分享
  • 10月16日
  • 进口高温高压粘度计优质供应商,粘度计代理商推荐
  • Apache Doris 内部数据裁剪与过滤机制的完成原理
  • 2025 年循环烘箱厂家推荐榜:热风循环烘箱厂家聚焦节能智能,这家企业成多行业优选
  • 10.16
  • 2598. 执行操作后的最大 MEX——模运算
  • 2025通风天窗厂家推荐正鑫,专业定制工业厂房通风排烟系统
  • 阿里面试:Redis挂了怎么办?集群 节点挂,怎么 恢复数据? 多长时间 的数据 可能 丢失?
  • Ubuntu 上安装 PHP 环境
  • 2025年工业陶瓷厂家 TOP 企业品牌推荐排行榜,工业陶瓷,氧化铝陶瓷推荐这十家公司!
  • 2025年石墨干燥机厂家推荐榜:真空干燥机/振动流化床干燥机/闪蒸干燥机高效环保成主流,这家企业凭实力登顶
  • 2025年空调系统/锅炉房运维服务厂家最新权威推荐榜:专业托管运维与设备维修外包服务深度解析
  • 混乱的置换 解题报告
  • 我42岁才顿悟:穷人的富养是带娃到处旅游,富人的富养是教会这一项本事