当前课程知识点:Android应用开发基础 >  第五章 广播 >  5.2 Android广播工作原理 >  5.2 Android广播工作原理

返回《Android应用开发基础》慕课在线视频课程列表

5.2 Android广播工作原理在线视频

下一节:5.2.1 实践案例-手机网络状态显示

返回《Android应用开发基础》慕课在线视频列表

5.2 Android广播工作原理课程教案、知识点、字幕

本节我们介绍广播接收器的工作流程

广播接收器的处理流程如下图所示

广播接收器的生命周期

取决于onReceive方法

广播接收器一旦处理完业务

也就是onReceive执行完毕

广播接收器对象将会处于失活状态

Android系统有权在内存资源紧张的时候

回收广播接收器

不要在onReceive中编写耗时操作

onReceive方法运行于应用的主线程中

一旦处理耗时操作将会导致ANR错误

4 注销广播接收器后

广播接收器将不会再收到任何广播数据

Android中广播注册流程如图所示

Android系统中有一个广播接收器注册列表

RegisteredReceivers

第二

使用super.registerReceiver

可以注册广播到广播接收器

比如

CustomerActivity中

注册了一个短信广播

NetworkService中

注册了一个网络状态的广播

广播接收器的注册

分为动态注册和静态注册

Android7.0后只提供动态注册

动态注册广播接收器的方法如下图所示

使用context. registerReceiver方法

注册广播接收器

注册广播接收器时需要提供

广播接收器对象

广播接收器Action 频道

静态注册广播接收器的方法如下图所示

1 广播接收器被注册到

AndroidManifest.xml配置文件

2 注册广播接收器时

需要提供广播接收器类全名

和广播接收器Action 频道

广播接收器注册的原理如图所示

1 所有的广播接收器都会被注册到

ActivityManagerService中

2 使用registerReceiver方法

通过动态方式注册接收器

3 PackageMangerService

扫描所有Android应用的

AndroidManifest.xml配置信息文件

4 将配置文件中的静态配置的接收器

注册入ActivityManagerService中

5 注册完接收器后

为接收器设置的Action频道

同时会与广播接收器捆绑

6 所有的广播接收器都被注册在

RegisteredReceivers列表中

当一个广播发送到ActivityManagerService中

满足广播Action的接收器

将会获取广播的对应数据

也就是接收器的onReceive方法

将会被回调

广播接收器接收广播的原理如图所示

1 所有的广播均会被发送到

ActivityManagerService

2 收到广播后

ActivityManagerService

从RegisteredReceivers列表中

寻找满足当前广播Action的Receiver

3 将满足Action的Receiver保存入队列中

准备发送广播

4 依次发送广播给队列中的Receiver

5 Receiver中保存了应用的PID 进程ID

6 Receiver收到ActivityManagerService

传递过来的数据

7 Receiver的onReceive方法

可以接受到本次数据传递

下面以一个网络状态显示的实例

来学习广播的发送和接收流程

当网络不能使用的时候

我们希望app能够有提示

如图所示

微信在网络状态不能连接的时候

会提示网络连接不能使用

它是如何实现的呢

下面我们以一个显示网络状态的实例

来讲解如何获取系统的网络广播

当网络是wifi的时候

显示wifi连接

当网络是4G信号的时候

显示4G信号

下面我们讲解如何实现网络状态广播的接收

1 编写广播接收类 NetworkStatusReceiver

接收广播

继承BroadcastReceiver

并重写onReceive方法

如图所示

1.1 首先使用intent.getAction()

取出意图的名称

1.2 判断意图是否为网络状态改变的广播

CONNECTIVITY_CHANGE

1.3 使用自定义的getAPNType方法

判断网络类型

1.4 将网络状态的编号和数据

使用EventBus发送到EventBus总线上

2 分析并获取网络状态

如下图所示

2.1 首先使用getSystemService

获得系统的网络管理器

2.2 使用getActiveNetworkInfo

获取系统的网络详细信息

2.3 使用getType()获取网络类型

2.4 如果网络的类型为移动信号

2.5 使用networkInfo.getSubtype()

获取子网络类型

2.6 返回网络类型

3 在Activity中注册广播接收器

NetworkStatusReceiver

如图所示

3.1 定义广播接收器

3.2 将Activity活动注册到EventBus

3.3 初始化广播接收器对象

3.4 新建网络状态广播过滤器

3.5 设置广播接收器接收网络状态广播

4 NetworkStatusReceiver与MainActivity

通过EventBus传递数据

如图所示

4.1 新建eventCode变量代表数据类型

4.2 新建iBatterydata变量代表网络类型

5 Activity中使用EventBus获取信息

电池电量信息均被保存在EventData对象

如图所示

5.1 重写Event的消息处理方法

5.2 使用event.getEventCode()

判断是否是网络状态类型广播消息

5.3 使用event.getiBatterydata()

取出网络状态类型的数据

并显示到组件上

6 应用程序退出注销

EventBus和广播接收器

如图所示

6.1 视图中重写onDestroy()方法

6.2 使用super.unregisterReceiver

注销广播接收器

6.3 使用EventBus.getDefault().unregister(this)方法

注销EventBus接收

下面就是我们最后的效果

如图所示

我们可以看到当网络是wifi的时候

显示wifi连接

当网络是4G信号的时候

显示4G信号的连接

这就是我们使用广播

来显示网络状态显示的一个实例

Android应用开发基础课程列表:

课程教案

-1 Android应用开发基础-课程标准

-2 Android应用开发基础-教案

第一章 Android概述

-讨论:Android应用开发基础资源下载地址

-讨论的问题:华为“鸿蒙系统”会取代安卓吗?

-Android Studio4.1.2安装常用问题汇总2021.3.15

-1.1 Android概述

--1.1 Android概述

--1.1 Android Studio安装与配置-实践案例

-1.1 Android概述--作业

-1.2 Android程序

--1.2 Android程序

--1.2 第一个Android应用程序-实践案例

-1.2 Android程序--作业

-1.3 Android程序调试

--1.3 Android程序调试

--1.3 Android程序调试-实践案例

-1.3 Android程序调试--作业

-讨论-完成第一个Android程序需要多长时间?

第二章 Android视图

-讨论-什么是Activity?

-2.1 Activity概述

--2.1 Activity概述

--2.1.1 实践案例-Activity生命周期

--2.1.2 实践案例-Activity跳转和数据传递

-2.1 Activity概述--作业

-2.2 Activity应用

--2.2 Activity应用

--2.2 实践案例-Activity四种启动模式

-第2章 Android视图--2.2 Activity应用

-讨论-怎么理解常用的四种启动模式?

第三章 Android组件

-讨论:Android在五个常用布局外还有哪几种布局方式?

-3.1 Activity布局

--3.1 Activity布局

--3.1 实践案例-Android布局

-3.1 Activity布局--作业

-3.2 Android基础组件

--3.2 Android基础组件

--3.2.1 实践案例-文本和按钮组件

--3.2.2 实践案例-编辑框和进度条组件

-3.2 Android基础组件--作业

-3.3 Android中级组件

--3.3 Android中级组件

--3.3.1 实践案例-复选框和开关组件

--3.3.2 实践案例-单选框和图像组件

-3.3 Android中级组件--作业

-3.4 Android适配器

--3.4.1 系统适配器

--3.4.2 自定义适配器

--3.4.1实践案例-系统适配器

--3.4.2 实践案例-自定义适配器

-3.4 Android适配器--作业

-讨论-如何解决Android的布局嵌套问题的?

第四章 Android Fragment

-讨论:Fragment的优点?

-4.1 Fragment碎片组件

--4.1.1 Fragment静态加载

--4.1.2 Fragment与Activity通讯

--4.1.3 Fragment动态加载

--4.1.1 实践案例-Fragment静态加载

--4.1.2 实践案例-Fragment的动态加载

-4.1 Fragment碎片组件--作业

-4.2 ViewPager翻页类组件

--4.2.1 ViewPager翻页类组件

--4.2.2 引导页和标题栏

--4.2 实践案例-引导页和选项卡

-4.2 ViewPager翻页类组件--作业

-讨论:fragment与activity的生命周期有哪些不同?

第五章 广播

-讨论:Android广播有什么作用?

-5.1 Android广播概述

--5.1 Android广播概述

--5.1.1 实践案例-手机电量显示

--5.1.2 实践案例-手机充电状态显示

-5.1 Android广播概述--作业

-5.2 Android广播工作原理

--5.2 Android广播工作原理

--5.2.1 实践案例-手机网络状态显示

--5.2.2 实践案例-短消息接收

-5.2 Android广播工作原理--作业

-5.3 自定义广播

--5.3 自定义广播

--5.3 实践案例-自定义广播与有序广播

-第5章 广播--5.3 自定义广播

-5.4 有序广播

--5.4有序广播

--5.4.2 实践案例-登录广播-记住密码

--5.4.2 实践案例-登录广播-强制退出

-第5章 广播--5.4 有序广播

-讨论:广播的动态注册和静态注册有什么区别?

第六章 Android服务

-讨论:Android的服务有什么作用?

-6.1 系统服务概述

--6.1 系统服务概述

-6.1 系统服务概述--作业

-6.2 访问系统服务

--6.2 访问系统服务

--6.2 实践案例-通知服务

-6.2 访问系统服务--作业

-6.3 自定义服务

--6.3 自定义服务

--6.3.1 实践案例-启动服务

--6.3.2 实践案例-绑定服务

--6.3.3 实践案例-后台服务

-第6章 Android服务--6.3 自定义服务

-6.4 多线程

--6.4 多线程

--6.4.2 实践案例-MyService下载

--6.4.3 实践案例-MyIntentService

--6.4.4 实践案例-AsyncTask实现对话框下载

--6.4.5 实践案例-下载精灵

-第6章 Android服务--6.4 多线程

-讨论:Android中怎么启动Service?

第七章 内容提供者ContentProvider

-讨论:ContentProvide的作用是什么?

-7.1 Android运行权限

--7.1 Android运行权限

--7.1 实践案例-拨打电话与发送短信

-7.1 Android运行权限--作业

-7.2 URL URI概述

--7.2 URL URI概述

-第7章 内容提供者ContentProvider--7.2 URL URI概述

-7.3 ContentProvider概述

--7.3 ContentProvider概述

--7.3 实践案例-读取联系人

-第7章 内容提供者ContentProvider--7.3 ContentProvider概述

-7.4 访问通讯录

--7.4 访问通讯录

--7.4.1 实践案例-读取通讯录

--7.4.2 实践案例-添加通讯录

--7.4.3 实践案例-删除更改通讯录

-第7章 内容提供者ContentProvider--7.4 访问通讯录

-7.5 课后作业案例

--7.5.1 实践案例-文件管理器-查看

--7.5.2 实践案例-文件管理器-播放

-讨论:ContentProvide如何使用?

第八章 多媒体

-讨论:Android多媒体主要应用于哪些场景?

-8.1 相机服务

--8.1 相机服务

--8.1.1实践案例-拍照服务

--8.1.2 实践案例-相册服务

-8.1 相机服务--作业

-8.2 音视频服务

--8.2 音视频服务

--8.2.1实践案例-音乐播放

--8.2.2 实践案例-视频播放

-8.2 音视频服务--作业

-讨论:Android视频组件的使用流程?

第九章 网络技术

-讨论:为什么使用Json作为网络的通讯格式?

-9.1 网络服务概述

--9.1 网络服务概述

--9.1 实践案例-WebView和Http服务

-9.1 网络服务概述--作业

-9.2 网络框架

--9.2 网络框架

--9.2 实践案例-okhttp框架

-9.2 网络框架--作业

-9.3 Json

--9.3 Json

--9.3 实践案例-json协议

-第9章 网络技术--9.3 Json

-9.4 Volley

--9.4 volley

--9.4 实践案例-volley框架

-第9章 网络技术--9.4 Volley

-讨论:OkHttp和Volley的有什么区别?

第十章 数据存储

-讨论:Android的存储方式有哪几种?

-10.1 文件存储

--10.1 文件存储

--10.1.1 实践案例-文件读写布局

--10.1.2 实践案例-文件读写

--10.1.3 实践案例-SharedPreference文件读写

-10.1 文件存储--作业

-10.2 数据库存储

--10.2 数据库存储

--10.2.1 实践案例-Sqlite数据库操作布局

--10.2.2 实践案例-Sqlite数据库操作

-10.2 数据库存储--作业

-讨论:SQLite的基础操作的流程是什么?

课程实训(不计入考核)

-第1章 实训简介以及开发环境配置

--实训项目简介PPT以及实训指导书

--1.1 实训项目简介

--1.2 项目开发环境配置

-第2章 在线音乐播放器整体设计以及服务端开发

--在线音乐播放器整体介绍PPT以及服务端开发实训指导书

--2.1 在线音乐播放器-整体设计

--2.2 在线音乐播放器-服务端开发

-第3章 在线音乐播放器-客户端开发

--3.1 客服端开发实训指导书以及PPT

--3.2 客户端开发-讲课视频

-第4章 在线音乐播放器-完整版

--4.1 实训指导书以及PPT

--4.2 在线音乐播放器-完整版授课视频

-第5章 QQ聊天项目

--5.1 实训指导书以及PPT

--5.2 QQ聊天项目授课视频

-第6章 在线点餐系统

--6.1 实训指导书以及PPT

--6.2 在线点餐系统授课视频

5.2 Android广播工作原理笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。