[Android进阶]Android中使用的观察者模式

观察者模式——Android控件的交互事件监听 先来说一下Android控件的交互事件监听。 有过Android开发经验的人都知道Android控件的事件监听流程一般有如下几步: 1、首先在布局文件***.xml中定义某一控件,我们拿登录界面来举例吧,一般登录界面中会有两个EditText控件,一个Button控件,首先在login.xml文件中定义这几个控件的布局; 阅读详情

Android中使用观察者模式的代码有很多,比如最近很火的EventBus、RxAndroid等,都使用了观察者模式,原因是观察者模式观察者和被观察者之间是抽象耦合,应对业务变化,可以增强系统灵活性,可扩展性。

我们很熟悉的BroadcastReceiver和ListView同样用到了观察者模式,当然ListView肯定用到了适配器模式。我们关心一下这两个是如何使用观察者模式的:

首先在Android中,我们往ListView添加数据后,都会调用Adapter的notifyDataChanged()方法,其中使用了观察者模式。

  • 当ListView的数据发生变化时,调用Adapter的notifyDataSetChanged函数,这个函数又会调用DataSetObservable的notifyChanged函数,这个函数会调用所有观察者(AdapterDataSetObserver)的onChanged方法,在onChanged函数中又会调用ListView重新布局的函数使得ListView刷新界面。

Android中应用程序发送广播的过程:

  • 通过sendBroadcast把一个广播通过Binder发送给ActivityManagerService,ActivityManagerService根据这个广播的Action类型找到相应的广播接收器,然后把这个广播放进自己的消息队列中,就完成第一阶段对这个广播的异步分发。
  • ActivityManagerService在消息循环中处理这个广播,并通过Binder机制把这个广播分发给注册的ReceiverDispatcher,ReceiverDispatcher把这个广播放进MainActivity所在线程的消息队列中,就完成第二阶段对这个广播的异步分发:
  • ReceiverDispatcher的内部类Args在MainActivity所在的线程消息循环中处理这个广播,最终是将这个广播分发给所注册的BroadcastReceiver实例的onReceive函数进行处理:
如何加快香山处理器Chisel->Verilog编译速度 相比使用默认的scala firrtl complier,使用CIRCT能够将香山代码编译到Verilog的速度提高50%左右。在执行make命令时加上MFC=1,例如make verilog MFC=1或make emu MFC=1。在本地从源码编译CIRCT,在编译完成后将circt/bin路径加入PATH中。使用GraalVM免费版作为JVM编译香山比OpenJDK快10%-20%。我们推荐使用GraalVM代替OpenJDK。使用CIRCT编译香山。 阅读详情

相关推荐

手把手教你用Verilog实现AT24C64的I2C读写(附完整仿真流程)

本文详细介绍了如何使用Verilog HDL设计AT24C64 EEPROM的I2C控制器,并配合ModelSim完成完整的仿真验证流程。内容涵盖I2C协议解析、Verilog状态机设计、AT24C64读写操作实现,以及仿真波形分析和调试技巧,为FPGA开发者提供了一套完整的EEPROM控制解决方案。

3c4x5z6v7b的博客 843

Android 中的设计模式之观察者模式

观察者模式是我们开发工作中经常使用的开发模式。Android 源码中也有很多地方用到此模式。比如:ListView、ContentProvider 和 Broadcast 等等。本文将会介绍观察者模式、实现一个观察者模式并结合 Android 源码进行分析。定义对象间的一种一个对多的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新。观察者模式又被称作发布/订阅模式。即 1 人发布,N 人订阅。

金戈鐡馬 1217

海康摄像头RTSP流延迟优化实战:从VLC到OpenCV的5种方案对比与性能调优

本文针对海康摄像头RTSP流的高延迟问题,深入剖析了延迟根源,并系统对比了从VLC、OpenCV到海康官方SDK、FFmpeg及硬件加速等五种主流方案的性能表现。重点分享了缓冲区设置、协议优化、多线程架构与硬件解码等实战调优技巧,旨在帮助开发者将视频流延迟从秒级优化至毫秒级,满足工业检测、安防监控等高实时性场景需求。

hh234的博客 804

Android开发模式之观察者模式

定义对象一种一对多的依赖关系,使得当一个对象改变状态的时候,所有依赖它的对象都会得到通知并自动更新。观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统。

weixin_43858011的博客 3099

libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-22.0.7-1.el7.x86_64

今天安装Rabbitmq的 erlang-22.0.7-1.el7.x86_64.rpmrpm包时遇到了这个坑,害找到说是不容易;错误信息在下面; [root@iz2zef7u84js1qeeq00ewwz RabbitMQ]# rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm warning: erlang-22.0.7-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY error:

qq_45782349的博客 5782

解构LOL数值平衡:从基础公式到实战决策的深层逻辑

本文深入解析了《英雄联盟》数值平衡的底层逻辑,从基础攻击力公式到经济系统设计,揭示了MOBA游戏背后的精密数学架构。通过实战案例展示护甲减伤、技能伤害建模等核心机制,探讨装备定价与战斗节奏的数值关联,帮助玩家理解版本更新中的平衡艺术。

weixin_42540248的博客 347

Android设计模式详解之观察者模式

观察者常用于订阅-发布系统,能够将观察者和被观察者进行解耦,降低两者之间的依赖;定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新。关联行为场景,需要注意的是,关联行为是可拆分的,而不是组合关系;事件多级触发场景;跨系统的消息交换场景,如消息队列、事件总线的处理机制。UML类图:抽象主题,被观察者的角色,抽象主题角色把所有观察者对象的引用保存到一个集合中,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察对象;

故不积跬步无以至千里 2196

mbedtls | 01 - 移植mbedtls库到STM32的两种方法

一、mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源、可移植、易于使用、代码可读性高的SSL库。可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议,它的代码占用空间小,非常适合用于嵌入式系统。 mbedtls遵循 Apache 2.0 开源许可协议,目前由 TrustedFirmware 维护(Linaro主持的一个治理开放社区项目),在Github上已收获 2.6k star,目前Github上发布的最新版本为 2.24.0 版本,开源仓库地址为:

Mculover666的博客(嵌入式) 1万+

Android设计模式--观察者模式

降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系目标与观察者之间建立了一套触发机制支持广播通信符合“开闭原则”的要求如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

m0_59162559的博客 367

C语言试题三之计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5))

1 、题目 计算并输出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5)) 2、部分函数说明 C 库函数 double pow(double x, double y) 返回 x 的 y 次幂。 3、源代码实现 #include <stdio.h> #include <...

码莎拉蒂 4609

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 705

Android—案例分析解读:观察者模式(1)

分享一份工作1到5年以上的Android程序员架构进阶学习路线体系,希望能对那些还在从事Android开发却还不知道如何去提升自己的,还处于迷茫的朋友!阿里P7级Android架构师技术脑图;查漏补缺,体系化深入学习提升**全套体系化高级架构视频;**七大主流技术模块,视频+源码+笔记有任何问题,欢迎广大网友一起来交流《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!何学起的朋友,同时减轻大家的负担。**

2401_84132381的博客 623

Android AVB 分析(十六)5 个例子彻底理解 FEC(Reed-Solomon) 的工作原理

关于 FEC 是如何工作的,一直是我 Android OTA 讨论群中的未解话题,大家基本上都不清楚 Android 上面的 FEC 是如何工作的,为什么在 OTA 升级的最后阶段,FEC 的编码计算会消耗大量的 IO 资源,并持续很长时间。接下来的几篇,我会从一个程序员的角度,演示基于里德所罗门编码的 FEC 到底是如何工作的。

洛奇看世界 667

Android中观察者模式(Observable)的理解

自定义view,Android开发的基本功。

2401_84149724的博客 77

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android设计模式系列--观察者模式

为什么很多程序员做不了架构师?1、良好健康的职业规划很重要,但大多数人都忽略了2、学习的习惯很重要,持之以恒才是正解。3、编程思维没能提升一个台阶,局限在了编码,业务,没考虑过选型、扩展4、身边没有好的架构师引导、培养。所处的圈子对程序员的成长影响巨大。金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

2301_76238237的博客 364

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android设计模式系列--观察者模式(1)

点击我的GitHub免费领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。点击我的GitHub免费领取获取往期Android高级架构资料、源码、笔记、视频。

imtokenmax众筹 378

关于使用 Android MVVM + LiveData 模式的一些建议

我这些话比较直接,可能会戳到一些人的玻璃心,但是我知道肯定会对一些人起到点醒的效果的。拥有一个完全隔离的仓库类作为一个单一的入口来处理这些复杂的事情是非常推荐的。此时,View 的引用有可能被回收或者旧的 Activity 不再可见,这样就产生了内存泄漏,甚至崩溃。就因为你只需补充你自己认为需要的,但并不知道企业需要的。因为你的技术体系并不系统,是零碎的,散乱的。在 ViewModels 和 Views 中沟通推荐的方式是观察者模式,利用 LiveData 或者其他库提供的可观察的方式。

2401_84149875的博客 1261

Android—案例分析解读:观察者模式(2)

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

2401_84009488的博客 793

观察者模式:从博客订阅到消息队列的解耦实践

/ 注册观察者// 注销观察者// 通知所有观察者// 抽象方法:主题状态变化时调用// 接收主题通知的更新方法适用场景核心特征典型案例实时数据通知一个对象状态变化需触发多个对象的响应股票行情推送、邮件订阅系统模块解耦需求对象间存在依赖但不想硬编码关联微服务事件驱动架构、GUI 事件处理异步事件处理需要将通知与业务逻辑分离消息队列、日志异步写入。

無言的博客 1291

Android 设计模式之观察者模式

目录 1. 介绍 1.1 定义 1.2 作用 1.3 优缺点 2. 实践案例Demo 2.1 利用Java内置的Observer/Observable 2.1.1 实现方式 2.2 自定义观察者/被观察者 2.2.1 具体实现方式 3.Android中包含观察者模式的组件源代码解析 3.1 ListView中观察者模式解析 4. 观察者模式与发布者/订阅者模式的区别 1...

jerechen的博客 1084

Android 观察者模式(Observer And Observable)

前言:在平时的项目中设计模式用的比较多的其中一种就是观察者模式,在前面的文章中写到过的EventBus、otto都是属于观察者模式的第三方开发框架。但是android中jdk也有相应的api来实现自己的观察者效果,就是Observer And Observable,今天这篇文章就是主要来介绍使用这两个类来实现自己的观察者模式的。 观察者模式定义 定义一个被观察者和多个观察者,每当被观察者变化,...

蒙的博客 6586

设计模式之ObserverPattern观察者模式

现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。 在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系。所有这些,如果用观察者模式来实现就非常方便。 观察者Observer模式的特点和定义: 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一

haoyuegongzi的博客 326

Android中的观察者模式

Android中的观察者模式是对象间的一种一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都会得到通知并且做出相应的更新。 观察者模式的实现比较简单,主要就是定义并维护以下几个角色: 1、观察者接口:这个接口中一般会定义一个接收通知的方法。 2、具体的观察者:观察者接口的具体实现类,在收到通知时做具体的响应操作。 3、被观察者接口:这个接口中定义了被观察者需要做的事情,通常这些事情包括:注册观察者、解注册观察者、消息通知。 4、具体的被观察者:被观察者接口的具体实现类,这个实现类中一般会有一个观察

androdi__LT的博客 2208

观察者模式(安卓开发)

3. 具体观察者实现:安卓组件(Activity/Fragment)实现接口,在生命周期方法中注册/移除监听,重写 onLoginStateChanged 处理自身业务(如UI更新、数据请求);2. 实现主题核心逻辑:LoginSubject 用单例保证全局状态统一,维护观察者列表,提供注册/移除/通知方法(移除监听是安卓中防内存泄漏的关键);System.out.println("首页UI更新:欢迎 " + userName + ",显示个人中心入口");

weixin_44893833的博客 571

Android源码中的观察者模式

在使用ListView时,数据改变后,我们会手动去调用ListView对应的adapter的setDataSetChanged()方法来通知ListView更新UI。换一种说法,ListView的UI是观察者,ListView对应的adapter中的数据是被观察者,ListView通过注册一个观察者到adapter中,以实现监听adapter的数据变化的目的。经过刨祖坟一般的Ctrl+鼠标左键之后,画出如下UML类图。图中可以看到,ListView注册到adapter中的观察者叫AdapterDataSet

hmh0512的专栏 1564
上一篇: [Java数据结构]从源码分析HashMap
下一篇: [Android进阶]Android性能优化
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值