Android Annotation注解RxJava开源网络库
Posted 安静的Sunny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Annotation注解RxJava开源网络库相关的知识,希望对你有一定的参考价值。
以下知识点Demo源码已经上传到github:
https://github.com/SunnyLy/ActivityLifeDemo
一、RxJava
响应式编程,流式控制。观察者消费者模式。
分析的好的博文:https://www.jianshu.com/p/ceb48ed8719d
目前已经更新到RxJava3.0:
RxJava2.0 VS RxJava1.0:主要是RxJava采用背压策略,解决了RxJava1.0中因为被观察者(Observable)发送事件速度 与观察者(Observer)接收事件速度不匹配,从而造成数据缓冲区消息积压,导致OOM的问题。
背压策略(BackPress)
根据观察者的响应式拉取(接收能力及反馈),对超出缓冲区大小的事件进行丢弃、保留、报错等措施。(类似线程池中,超过线程池中最大线程数时的处理策略)
在RxJava2.0中,用Flowable替代RxJava1.0中的Observalable来实现背压。同时观察者Observer也被Suscriber(订阅者)代替
RxJava2.0 VS RxJava1.0
响应式拉取
/**
* 步骤1:创建被观察者 = Flowable
*/
Flowable<Integer> upstream = Flowable.create(new FlowableOnSubscribe<Integer>()
@Override
public void subscribe(FlowableEmitter<Integer> emitter) throws Exception
// 被观察者发送事件数量 = 4个
Log.d(TAG, "发送了事件1");
emitter.onNext(1);
Log.d(TAG, "发送了事件2");
emitter.onNext(2);
Log.d(TAG, "发送了事件3");
emitter.onNext(3);
Log.d(TAG, "发送了事件4");
emitter.onNext(4);
emitter.onComplete();
, BackpressureStrategy.ERROR);
/**
* 步骤2:创建观察者 = Subscriber
*/
Subscriber<Integer> downstream = new Subscriber<Integer>()
@Override
public void onSubscribe(Subscription s)
Log.d(TAG, "onSubscribe");
s.request(3);//Subscription.request()为响应式拉取,即设置观察者的接收能力
// 观察者接收事件 = 3个 ,即不匹配
@Override
public void onNext(Integer integer)
Log.d(TAG, "接收到了事件 " + integer);
@Override
public void onError(Throwable t)
Log.w(TAG, "onError: ", t);
@Override
public void onComplete()
Log.d(TAG, "onComplete");
;
/**
* 步骤3:建立订阅关系
*/
upstream.subscribe(downstream);
二、android网络请求框架
三、Annotation注解、APT注解工具 、 AOP面向切面
- 注解原理 及框架
java中注解是利用java.lang.annotation中的Annotation接口,主要目的就是用于给java代码动态插入元数据。而注解的提取则是由**APT(Annotation Processor Tool) ** 负责。而这种处理注解的方式根据注解信息生命周期来分的话主要有两种:- 编译时(信息只会保留在编译期的class文件中,运行时无法获取注解元数据)
- 运行时 (信息会一会保留,运行时可获取)
注解处理方式 | 原理 | 特点 |
---|---|---|
编译时 | row 1 col 2 | 1,注解信息只会保留在编译阶段的class文件中,运行时无法获取2、相对性能好一点 |
运行时 | 利用java反射机制实现, 2 | 1,注解信息一起保留到运行时;2、因为是利用Java反射,所以性能会差一点| |
https://blog.csdn.net/u012758497/article/details/86379615
- AOP 原理 及框架
AOP面向切面编程,是一种编程思想,利用注解来实主现,主要知识点如下:
关键类/接口 | 注释 | 用法| |
---|---|---|
JoinPoint | 表示连接点,提供利用反射获取当前连接点的方法名,参数,上下文等信息的方法 | |
ProceedingJoinPoint | 为JoinPoint子类,proceed()为其重要方法,表示执行切入点方法里面的方法体 | joinPoint.proceed(); |
PointCut | AOP中注解,用来定义切入点(也叫插桩): 1、call表示只调用方法,不执行; 2、execution:表示执行某方法 | 先自定义一个方法,用来表示此切入点信息,如下:@Pointcut("execution(@ext.sunny.com.aoplib.permission.PermissionsNeeded * *(..)) && @annotation(needPermission)")fun requestPermissionMethod(needPermission:PermissionsNeeded) Log.e("aop", "AOP>>>>>找到了插入点") |
Advice | 消息处理中心,也就是业务逻辑处理中心。主要包括以下几种: 1、Around:代码编织处,只将编织的新代码替换到切入点的代码; 2、Before:在切入点之前执行(比如:在执行某一个方法前,进行非空判断或者加入埋点统计) 3、After:在切入点之后执行。 |
- 无痕埋点
就是利用Aop的原理,我们可以将这些需要进行埋点的地方,进行单独的代码编写,以jar包的形式放在服务器,然后由App拉取进行加载。从而实现埋点功能。
以上是关于Android Annotation注解RxJava开源网络库的主要内容,如果未能解决你的问题,请参考以下文章
Android注解(annotation)实现绑定事件的原理
Android注解(annotation)实现绑定事件的原理
Android开发学习之路--Annotation注解简化view控件之初体验
Android ProGuard加密webview的JavascriptInterface注解annotation的问题