Android四大组件详解(大白话版)

大家好,这里是不爱编程的小梁,本期文章开始,我会给大家开启一个新的专栏,那就是Android开发,希望可以大家可以多多订阅支持!!!

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也可以继续运行。

举个栗子:

  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()。


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的生命周期

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

  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管数据。


本期文章到这里就结束了,我们下期文章见!!!

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui