美文网首页
开源框架原理概览

开源框架原理概览

作者: 编程的猫 | 来源:发表于2021-08-16 13:42 被阅读0次
ARouter:一个好用的组件化通信解耦的框架

可对照该博文一起理解,该博文整个流程也讲的很详细
通过编译时注解结合java-poet生成的路由映射表文件类型如下:
ISyringe:用于赋值Autowired标记的成员
IRouteGroup:用于添加路由路径和与之对应的路由标签信息
IRouteRoot:用于添加分组组别下的路由标签信息,一个组对应该组下的所有IRouteGroup类
IProviderGroup:用于添加IProvider类型的路由路径和路由标签信息
IInterceptorGroup:用于添加IInterceptor类型的路由路径和路由标签信息

初始化
ARouter初始化的目的是将编译期间通过java-poet生成的路由表文件class路径名称添加到内存中(存储在HashSet中)
初始化加载路由表文件方式有两种:

  1. 通过ARouter-Plugin插件在编译期间通过Transform的方式将路由表文件class路径加载到HashSet中
  2. 通过在Application中调用ARouter.init(this)方法扫描Dex中的类过滤加载路由表文件class路径到HashSet中(会在线程池中执行)

然后,遍历HashSet分类反射Root、Interceptors、Providers的示例对象,调用loadInto方法将每个使用ARouter注解的类存储到Warehouse的groupsIndex、providers、providersIndex中缓存。

@Autowired注解赋值
在使用ARouter.getInstance().inject(this)时候,会通过路径构建Postcard在其内部通过反射构建实例对象AutowiredServiceImpl,在AutowiredServiceImpl内部获取Autowired文件的示例对象,调用inject()方法实现@Autowired注解标记的成员赋值。

导航跳转
在使用ARouter.getInstance().build().navigation()跳转,在函数链上首先会构造Postcard,如果构建出错会走降级逻辑;构建成功会判断是不是绿色通道,如果不是那么会走拦截器的逻辑,如果在拦截器链上回调了onContinue方法,那么会接着判断Postcard的类型,如果是Activity那么会构建Intent等信息,检查切换主线程调用startActivity跳转;如果是Fragment、广播接收者、ContentProvider会直接通过反射实例对象返回。如果在拦截器链上走了onInterrupt方法,那么会通过NavigationCallback回调出去。

RxJava:一个简化异步调用的库,更是一种优雅的编程方式和编程思想

特点
简洁,免除传统异步代码逻辑中的callback
增加业务逻辑代码的可读性
学习理解RxJava2.0可以参详这篇博文

主要搞清楚两个概念
事件流
线程调度

事件流
执行代码时,自上而下每一步操作符都会创建一个新的Observable(均为Observable的子类,对应不同的操作符),当执行create时,创建并返回了ObservableCreate,当执行map时,创建并返回了ObservableMap,并且每一个新的Observable都持有它上游的源Observable(即source)及当前涉及到的操作函数function。当最后一步执行订阅方法subscribe时会触发ObservableMap的subscribeActual()方法,并将最下游的Observer包装成MapObserver,同时该方法又会继续调用它所持有ObservableCreate的订阅方法(即执行source.subscribe),由此也会触发ObservableCreate的subscribeActual()方法,此时我们的发射器CreateEmitter才会调用它的onNext()方法发射事件,再依次调用MapObserver的操作函数mapper和onNext()方法,最终将事件传递给了最下游的Observer的onNext()方法。

每个操作符既是一个观察者,订阅上面的数据流,也是一个被观察者,发送经过其处理的数据源。所以:RxJava形成的可观察事件序列,除了首尾,中间事件节点,都是既是观察者又是被观察者,其向上订阅,向下分发数据,
我们可以将RxJava形成的事件序列可称为数据流,数据从最初的Observable流向最后的Observer。

线程调度
subscribeOn:用于指定上游所在的线程
observeOn:用于切换指定下游所在的线程

切换到子线程通过指定schedules线程类型在方法scheduleActual中添加将线程池中执行

切换到主线程,通过指定主线程的handler,然后通过handler发送一条附带callback的消息,在handler的dispatchMassage方法中执行msg的callback.run()实现切换

VirtualAPK

VirtualAPK资源冲突解决方案

热修复

Tinker热修复详解

相关文章

  • 开源框架原理概览

    ARouter:一个好用的组件化通信解耦的框架 可对照该博文一起理解,该博文整个流程也讲的很详细[https://...

  • android-框架-图片加载

    Fresco 概览 2015年3月Facebook开源的图片框架。https://www.fresco-cn.or...

  • netty 概览与hello world(一)

    netty概览 Netty是由JBOSS提供的一个java开源框架。 Netty is an asynchrono...

  • 阿里开源 iOS 协程开发框架 coobjc 学习(一)

    阿里开源 iOS 协程开发框架 coobjc 学习 coobjc 概览 coobjc 为 OC 和 Swift 提...

  • SpringBoot启动原理及相关流程

    一、springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的...

  • Android 架构学习目录

    【转】剖析Android开发中常用开源库的基础知识,架构设计和核心原理,目前规划剖析的开源框架有:1)日志框架:l...

  • SwiftUI技术

    一、概览 本篇文章将概述 SwiftUI 的工作原理,以及它与 UIKit 等框架的不同之处。SwiftUI 在概...

  • HealthKit 框架详细解析

    HealthKit框架详细解析(一) —— 基本概览(一)HealthKit框架详细解析(二) —— 基本概览(二)

  • 第三方框架解析文章收录

    Android中热修复框架Robust原理解析+并将框架代码从"闭源"变成"开源"(上篇) Android中热修复...

  • WebKit 框架解析

    WebKit框架解析(一)—— 基本概览及WKWebView(一)WebKit框架解析(二)—— 基本概览及WKW...

网友评论

      本文标题:开源框架原理概览

      本文链接:https://www.haomeiwen.com/subject/ujxrbltx.html