大家好,这里是不爱编程的小梁,本期文章开始,我会给大家开启一个新的专栏,那就是Android开发,希望可以大家可以多多订阅支持!!!
前言
在咱们Android开发的世界里,有四个核心组件如同四根支柱,支撑着整个APP大厦。分别是Activity(活动)、Service(服务)、**BroadcastReceiver(广播接收器)**和 ContentProvider(内容提供者)。

其中:
(1)**Activity:**通俗来讲其实就是APP上用户看到的一个个页面,Activity组件负责界面展示、处理用户交互、进行数据传递等
(2)**Service:**无界面的后台组件,用于执行长期运行的操作。比如说应用商店后台下载东西、后台播放QQ音乐等等
(3)**BroadcastReceiver:**手机里的"消息喇叭",用于监听系统或者应用发出的全局事件的组件,比如网络状态的变化、充电状态的变化等等
(4)**ContentProvider:**应用间的"数据共享存储桥",是管理跨应用访问的组件,通过URI来标识数据,比如说咱们的手机通讯录是不是可以被多个应用访问读取
这四大组件各自承担着不同的职责,彼此之间协同工作,共同为用户提供一个流畅的APP体验。那么废话不多说,接下来我将带领大家一一认识并且熟悉这四大组件!!!
一、Activity(活动)
1 什么是Activity?
Activity是Android应用中用于展示用户界面的组件。通俗来说,每个Activity就代表咱们的一个屏幕,我们可以通过它与应用程序进行交互。
你可以把Activity想象成手机屏幕上的一个"页面"。比如,当你打开一个App时,看到的第一个界面就是一个Activity;点击某个按钮跳转到另一个界面,那就是另一个Activity。每个Activity就是一个独立的"屏幕",负责展示内容和与用户交互。
举个栗子:
打开微信,首页是一个Activity。
点击跟你女的朋友的聊天窗口,跳转到聊天界面,这是另一个Activity。
点击"发现"按钮,跳转到"发现"页面,这又是一个新的Activity。
2 Activity的生命周期
Activity的生命周期包括以下几个关键方法:
onCreate() :Activity被创建时调用。比如,当你点击CSDN,系统会创建CSDN的MainActivity,并且调用OnCreate()这个方法。通常会在这里初始化界面和变量,这时候我们看到的是一片空白。
onStart() :Activity即将可见时调用。比如,CSDN的首页即将显示在屏幕上。
onResume() :Activity获得焦点,用户可以与之交互时调用。比如,CSDN首页面完全显示出来,用户可以点击各种按钮进行操作。
onPause():Activity失去焦点时调用。比如,用户按了Home键回到桌面,或者跳转到另一个页面。onRestart() :Activity从停止状态重新启动时调用。首页Activity从后台回到前台。
onStop() :Activity不再可见时调用。比如,你点击文章详情页跳转到了文章里面。首页面被完全覆盖。
onDestroy():Activity被销毁时调用。比如,用户关闭了页面。

看到这里是不是很懵?没关系,下面我会用更加贴近生活的例子来给大家讲解Activity的生命周期。
我是这么理解Activity的生命周期的,可以把Activity的生命周期比作人的一生:
**onCreate():**婴儿在母亲肚子里,这时候我们看不到,但是我们已经开始被初始化了
**onStart():**出生了,睁开眼,别人可以看到我们了,但是我们还不会说话,不会互动(用户不能能跟页面进行互动)
**onResume():**我们长大了,步入青年,开始学习工作跟社会接触(用户可以跟页面进行交互了)
**onPause():**工作学习累了,歇会儿(Activity被部分遮挡(比如弹出一个对话框),但还没有完全不可见。)
**onStop():**退休了(Activity被完全遮挡(比如跳转到另一个Activity),不再显示在屏幕上。)
onRestart():你决定重新开始工作(Activity从后台回到前台,准备重新显示。)
onDestroy():生命的终结,要over掉了(Activity被系统销毁,释放资源。)
3 Activity示例(Android Studio日志打印生命周期)




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

举个栗子:
- 你在听QQ音乐时,切换到微信聊天,音乐还在播放,这就是Service在后台工作。
- 你在应用商店下载王者荣耀时,即使你退出了应用商店,下载任务仍然在继续,这也是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()。
3 Service示例

Started Service(启动式Service)

Bound Service(绑定式Service)

三、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的生命周期
广播接收器的生命周期非常简单,主要包括以下两个阶段:
- 接收广播:当广播发出时,系统会创建广播接收器的实例,并调用它的onReceive()方法。
- 完成任务: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的特点
- 数据共享:ContentProvider可以让不同应用之间共享数据。比如,通讯录App可以通过ContentProvider将联系人信息共享给其他App。
- 统一接口:ContentProvider提供了一套标准化的接口(比如query()、insert()、update()、delete()),其他应用可以通过这些接口访问数据。
- 数据安全:ContentProvider可以通过权限控制来保护数据。比如,你可以设置只有特定应用才能访问你的数据。
3 ContentProvider的核心方法
ContentProvider的核心方法包括:
query():查询数据。
insert():插入数据。
update():更新数据。
delete():删除数据。
getType():返回数据的MIME类型。
五、总结
Android四大组件是构建一个APP的核心模块,分工明确:
- Activity:负责展示用户界面,就像App的一个个"页面",用户通过它与应用交互。
- Service:在后台默默干活的打工人,比如播放音乐或下载文件,没有界面但能长时间运行。
- BroadcastReceiver:像"收音机"一样接收系统或应用发出的广播消息,比如电量低或网络变化,然后做出响应。
- ContentProvider:是"数据管家",管理应用的数据并提供统一接口,让其他应用也能访问这些数据。
一言以概之,Activity管界面,Service管后台,BroadcastReceiver管消息,ContentProvider管数据。
本期文章到这里就结束了,我们下期文章见!!!