Android Broadcast原理分析之LocalBroadcast(三)

2024-06-16 13:18

本文主要是介绍Android Broadcast原理分析之LocalBroadcast(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • LocalBroadcastManager简介
  • LocalBroadcastManager使用
  • 源码解析
  • 总结

1. LocalBroadcastManager简介

前面的文章介绍了常用的Broadcast原理,这种广播是经过系统调度的,不论是动态注册还是静态注册,不论是有序广播还是无序广播,都要经过ams,好处很显然,可以实现跨进程之间的通信,而且有很多广播本身就是由系统发出的,我们需要在APP的进程中监听,但是也是有坏处的,因为AMS其实是很繁忙的,如果出现比较特殊的情况导致AMS被阻塞,就可能会影响我们自身收到receiver的时间,甚至收不到,这样就可能会影响到APP自身的业务。
Android中也是考虑到了这种情况,因此在v4包中引入了LocalBroadcastManager,顾名思义,叫做本地广播,也就是只在APP的自身进程中运行,不会被其他情况干扰,当然这个不能用作跨进程通信的手段。

2. LocalBroadcastManager使用

核心类就是LocalBroadcastManager,这个类的方法并不多,但是也涵盖了常用的registerReceiver,unregisterReceiver,sendBroadcast等方法。
先来看看其中主要都有那些方法:

单例模式获取LocalBroadcastManager
public static LocalBroadcastManager getInstance(Context context);

广播注册
public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter);

取消注册
public void unregisterReceiver(BroadcastReceiver receiver);

发送广播
public boolean sendBroadcast(Intent intent);

同步发送广播
public void sendBroadcastSync(Intent intent);

执行广播派发
private void executePendingBroadcasts();

可以看到,和平时使用的广播没有太大区别,不过需要通过getInstance获取一个单例之后操作,其中有一个方法看起来没有见过,executePendingBroadcasts,而且是一个private方法,接下来从源码看一下这个LocalBroadcast的实现。

3. 源码解析

3.1 getInstance

    private static LocalBroadcastManager mInstance;public static LocalBroadcastManager getInstance(Context context) {synchronized (mLock) {if (mInstance == null) {mInstance = new LocalBroadcastManager(context.getAp

这篇关于Android Broadcast原理分析之LocalBroadcast(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066556

相关文章

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja