当前位置: 首页 > news >正文

【安卓笔记】RxJava的Hook机制,整体拦截器

0. 环境:

电脑:Windows10

Android Studio: 2024.3.2

编程语言: Java

Gradle version:8.11.1

Compile Sdk Version:35

Java 版本:Java11

1. 使用场景

整个项目都是用了RxJava,需要对 整个/部分 项目的RxJava进行监听(拦截)

就会使用到Hook技术

下面请看代码:

public void hookConfig() {RxJavaPlugins.setOnObservableAssembly(new Function<Observable, Observable>() {@Overridepublic Observable apply(Observable observable) throws Throwable {// 此时,会对全局的操作符都进行操作// 可以是打印日志,可以使记录时间,也可以debug// 还可以通过if判断,对部分操作符进行操作、对部分操作符忽略System.out.println("running timestamp: ");System.out.println(System.currentTimeMillis()); // 例如,打印时间return observable;// 此处必须要有返回值,不能为null,否则会报NPE}});
}public void testHook() {Observable.create( // 此处为create操作符new ObservableOnSubscribe<Object>() {@Overridepublic void subscribe(@NonNull ObservableEmitter<Object> emitter) throws Throwable {emitter.onNext("data");}}).map( // 此处为map操作符new Function<Object, Boolean>() {@Overridepublic Boolean apply(Object o) throws Throwable {return true;}}).subscribe(new Observer<Boolean>() {@Overridepublic void onSubscribe(@NonNull Disposable d) {}@Overridepublic void onNext(@NonNull Boolean aBoolean) {}@Overridepublic void onError(@NonNull Throwable e) {}@Overridepublic void onComplete() {}});
}

可以看到,总共有两个操作符:.create 和 .map

同时,查看打印日志:

2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  running timestamp: 
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  1752923124281
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  running timestamp: 
2025-07-19 19:05:24.281  2529-2529  System.out              com.liosen.androidnote               I  1752923124281

确实打印了两次日志。

说明hook已经完成。

比较简单。

可以根据每个人的业务不同,进行修改

2. 写在最后

本篇文章主要是为了解决:全局拦截,学会Hook机制

关于RxJava,可以查看我其他文章:

【安卓笔记】RxJava的使用+修改功能+搭配retrofit+RxView防快速点击:https://blog.csdn.net/liosen/article/details/149340103

【安卓笔记】RxJava之flatMap的使用:https://blog.csdn.net/liosen/article/details/149343166

【安卓笔记】RxJava的onNextDo的使用:https://blog.csdn.net/liosen/article/details/149343321

【安卓笔记】RxJava的Hook机制,整体拦截器:https://blog.csdn.net/liosen/article/details/149467298

http://www.lryc.cn/news/593134.html

相关文章:

  • Kotlin内联函数
  • kotlin部分常用特性总结
  • Window延迟更新10000天配置方案
  • 【设计模式C#】状态模式(用于解决解耦多种状态之间的交互)
  • 使用目标检测yolo11去训练微藻细胞检测数据集YOLO格式703张6类别步骤和流程
  • 云端成本治理利器:亚马逊云科技智能仪表盘(AWS Cost Intelligence Dashboard)深度解析
  • Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对话系统多轮交互优化与用户体验提升(351)
  • 前端面试专栏-工程化:27.工程化实践(CI/CD、代码规范)
  • NLP中情感分析如何结合知识图谱在跨文化领域提升观念分析和价值判断的准确性?
  • 基于Socket来构建无界数据流并通过Flink框架进行处理
  • xss-dom漏洞
  • 力扣 hot100 Day49
  • 【Python练习】050. 编写一个函数,实现简单的日历功能,显示当前日期和星期
  • Uniapp之键盘弹窗
  • 了解pycharm的基本运用
  • Android无需授权直接访问Android/data目录漏洞
  • 开启你的专属智能时代:枫清科技个人智能体限时体验计划上线!
  • 网络基础DAY13-NAT技术
  • 嵌入式学习-PyTorch(9)-day25
  • Tomcat 生产 40 条军规:容量规划、调优、故障演练与安全加固
  • Linux:lvs集群技术
  • steam游戏搬砖项目超完整版实操分享
  • 6-大语言模型—预训练:数据处理
  • HOT100——排序篇Leetcode215. 数组中的第K个最大元素
  • LVS工作模式和算法的总结
  • 相角补偿全通滤波器设计:相位均衡(0~350Hz,15°超前)
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • 计算机网络——IPv4(25王道最新版)
  • python的第三方库的基本运用
  • RISC采用的3种流水技术的功能和区别分析