《深入理解Android:Telephony原理剖析与最佳实践》一3.4 广播

简介: 本节书摘来自华章出版社《深入理解Android:Telephony原理剖析与最佳实践》一 书中的第3章,第3.4节,作者:杨青平,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 广播

广播(Broadcast),看字面意思可以联想到车站、商场等都有广播,对于广播来说,发送方并不需要知道广播接收方的数量及接收到广播如何反应,这些都是接收方的事。那么,在Android 平台中的广播是否与生活中的广播相似呢?答案是肯定的,发送方仅需要将广播内容完成发送,而接收方过滤自己需要的广播信息和内容,然后进行处理,接收方信息是发送方不知道的。

3.4.1 Android 系统中的广播

Android 系统中有非常多的广播,当系统启动或应用运行时便会向 Android 注册各种广播,Android 系统接收到广播后,会判断哪种广播需要哪种事件。广播事件的筛选由Android 系统完成,在接收广播时,程序员仅需要定义广播的过滤器,即接收什么样的广播内容。
从定义来讲,广播主要分发送方和接收方,Android中的广播也是如此。Android中广播的接收方处理逻辑相对复杂一些,首先要注册广播过滤器并继承abstract class BroadcastReceiver实现广播接收的onReceive方法。

3.4.2 Broadcast接收

首先创建自己的Broadcast广播接收类MyRecvBroadcast,可以不依赖Activity,其代码详情如下:

public class MyRecvBroadcast extends BroadcastReceiver {
    //Android工程中的任何类,继承BroadcastReceiver类,并覆盖onReceiver方法
    @Override
    public void onReceive(Context context, Intent intent) {
        StringBuffer str = new StringBuffer("Recive Broadcast action:");
        str.append(intent.getAction());
        str.append(", Message:");
        str.append(intent.getStringExtra("message"));
        System.out.println(str);
    }
}

Android中主要采用两种方式增加广播过滤器。
1)在广播接收方应用的AndroidManifest.xml配置信息文件中增加过滤信息和内容,在application节点中加入如下XML配置信息:

<receiver android:name="com.myandroid.MyRecvBroadcast">
    <intent-filter>
        <action android:name="static_broadcast" />
    </intent-filter>
</receiver>

2)在程序中通过代码增加广播过滤信息和内容,这些代码可以在Application或Activity的onCreate增加广播过滤器的注册,但同时需要注意在对应的生命周期里注销Broadcast的广播过滤器,可参考如下代码内容:

IntentFilter intentfilter = new IntentFilter();//Intent过滤器
intentfilter.addAction("dynamic_broadcast");//过滤器增加Intent过滤内容
MyRecvBroadcast mrb = new MyRecvBroadcast();
registerReceiver(mrb, intentfilter);//向系统注册MyRecvBroadcast广播接收器及Intent过滤器

3.4.3 Broadcast发送

广播发送有三种形式,即sendBroadcast ()、sendOrderedBroadcast()、sendStickyBroadcast()。我们重点看sendBroadcast方式,发送广播的代码如下:

Intent intent = new Intent();             //广播均通过Intent进行发送
intent.setAction("dynamic_broadcast");    //Action类型,接收方可通过Action类型进行过滤
intent.putExtra("message", "send broadcast");//广播数据
sendBroadcast(intent);            //发送广播
intent.setAction("static_broadcast");
intent.putExtra("message", "send broadcast");
sendBroadcast(intent);

Broadcast相比Handler异步消息处理、AIDL跨应用服务访问要简单得多,这是由广播的特性决定的。广播只管发,不管接收方及相关处理,并且在Android中广播的具体实现已经交给了系统来完成。

相关文章
|
2月前
|
移动开发 监控 Android开发
Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践
本文主要介绍了 ARMS 用户体验监控的基本功能特性,并介绍了在几种常见场景下的最佳实践。
364 13
|
3月前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
187 8
|
1月前
|
缓存 Java 数据库
Android的ANR原理
【10月更文挑战第18天】了解 ANR 的原理对于开发高质量的 Android 应用至关重要。通过合理的设计和优化,可以有效避免 ANR 的发生,提升应用的性能和用户体验。
124 56
|
2月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
53 3
|
3月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
51 2
|
3月前
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
301 12
|
2月前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
45 0
|
4月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
141 0
|
5月前
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
70 6
|
6月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
68 2