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(订阅者)代替

image

RxJava2.0 VS RxJava1.0

image

响应式拉取

    /**
     * 步骤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网络请求框架

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拉取进行加载。从而实现埋点功能。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读