Android三方框架

 网络请求

Okhttp3:安卓端最火热的网络请求库,使用简单,功能完备

Okhttp3采用责任链模式,设置拦截器对请求跟响应做统一处理,自带了五个拦截器,实现了重连接、设置请求头、是否缓存等功能,也可以自定义拦截器。

线程池定义在分发器dispather中,没有核心线程、线程可以无限多,线程存活时间60秒。

OkHttp3的最底层是Socket

优点

支持HTTP2/SPDY(SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。)

socket自动选择最好路线,并支持自动重连,拥有自动维护的socket连接池,减少握手次数,减少了请求延迟,共享Socket,减少对服务器的请求次数。

基于Headers的缓存策略减少重复的网络请求。

拥有Interceptors轻松处理请求与响应(自动处理GZip压缩)。

这个简书讲了okhttp中线程池问题

https://www.jianshu.com/p/da4a526a9d72

OkHttp中的线程池是定义在分发器中的,即定义在Dispatcher

配置的线程池的核心线程数为0,最大线程数为Integer.MAX_VALUE,线程的存活时间为60s

Square公司的的网络请求开源库

OkHttp内部自带的五种拦截器,因为这五种拦截器组合完成了真正的Http网络请求。自带的五大拦截器将Request按责任链模式依序向下传递,Response结果再按责任链逆序向上传递返回。也就意味着第一个执行的拦截器最先接触到Request,最后接收到Response:

1、重试与重定向拦截器:RetryAndFollowUpInterceptor

重试重定向拦截器在交出请求(交给下一个拦截器)之前,负责判断用户是否取消了请求;在获得了结果之后,会根据异常情况以及响应码判断是否需要重试或重定向,如果满足条件那么就会重启执行所有拦截器。

2、桥接拦截器:BridgeInterceptor。

桥接拦截器在交出之前,负责将HTTP协议必备的请求头加入其中(如:Host)并添加一些默认的行为(如:GZIP压缩);在获得了结果后,调用保存cookie的接口并解析GZIP数据。

3、缓存拦截器:CacheInterceptor

缓存拦截器顾名思义在交出之前读取并判断是否使用缓存;且获得结果后判断是否缓存。

4、连接拦截器:ConnectInterceptor

连接拦截器在交出之前,负责找到或者新建一个连接,并获得对应的socket流。

5、请求服务器连接器:CallServerInterceptor

请求服务器拦截器进行真正的与服务器的通信,向服务器发送数据,解析读取的响应数据。

volley 网络请求库,适合进行数据量不大,但通信频繁的网络操作

Retrofit 基于okhttp封装的网络库

【精选】Retrofit2 详解和使用(一)-CSDN博客

本质过程:App应用程序通过Retrofit请求网络,实质上是使用Retrofit接口层封装请求参数、Header、Url等信息,之后由okhttp来完成后续的请求工作。在服务端返回数据后,okhttp将原始数据交给Retrofit,Retrofit根据用户需求解析。

图片加载:

glide 快速高效的图片加载库

picasso 强大的图片加载缓存库

universal-image-loader 强大灵活的图片加载处理库

coil 快速高效的图片加载库

图片处理:

circleimageview 圆形图像处理库

ucrop 图片裁剪库

photoview 图片缩放库

matisse 本地图片选择库

数据库:

greendao 将对象映射的SQLite的ORM解决方案库

事件传递:

Eventbus(事件总线)57kb

原理:使用观察者模式,订阅消息、发布消息来通信。

有三个角色

1Event事件,可以事任意类型,EventBus根据事件类型进行全局通知。

2Subscriber,可以在Activiry、Fragment、Services中订阅事件,可以设置事件运行在主线程还是子线程。

3Publisher:事件发布者。可在任意线程里发布事件

EventBus、BroadcastReceiver和Handler均是Android中进程间消息传递的方式

AndroidEventBus的粘性事件

粘性事件能在发送事件之后再订阅该事件也能接收到该事件。与普通事件不同,普通事件是先注册后发布,粘性事件可以先发布后注册。

AndroidEventBus的粘性事件的使用与EventBus的粘性事件不同,AndroidEventBus需要注册粘性事件,订阅者的事件处理函数不需要添加sticky标识。

注意:

EventBus 官方文档中建议在onStart()中注册,在onStop()中注销,否则有可能收不到。

JSON解析:

fastjson Java语言编写的高性能功能完善的JSON库

Fastjson原理:

利用Java自带的反射机制解析JSON字符串。

将JSON字符串转换成Java对象,通过反射读取对象的字段。

自定义类型可以实现任意Java对象之间的转换。

gson Java序列化反序列化库用于JSON和Java对象转化

“Gson的原理是通过反射机制将Java对象的属性和JSON数据的键值对进行映射。

热修复:

tinker 腾讯热修复解决方案

性能优化:

leakcanary 内存泄漏检测库

blockcanary 卡顿检测

arca 应用崩溃报告

注解框架:

butterknife Android系统的View、Resource、Action注入框架

ButterKnife是用来解放开发者的,避免重复编写findViewById,setOnClickListener等操作,也就是说,其实这是一个用来提高开发效率的框架,当然,现在kotlin语言已经流行起来,直接用id就可以访问到view,故相应该框架的优点也稍微被弱化了。

在编译前,生成相应的辅助类,xx_ViewBinding.java,运行时,利用该辅助类对Activity中的view进行findViewById等操作

dagger 依赖注入库

组件化:

arouter 帮助 Android App 进行组件化改造的路由框架

原理:ARouter通过Apt技术,生成保存路径(路由path)和被注解(@Router)的组件类的映射关系的类,利用这些保存了映射关系的类,Arouter根据用户的请求postcard(明信片)寻找到要跳转的目标地址(class),使用Intent跳转。原理很简单,可以看出来,该框架的核心是利用apt生成的映射关系。

响应式:

rxjava 是一种响应式编程,来创建基于事件的异步操作库

有四个基本概念:

Observable(被观察者)

Observer(观察者)

Subscribe(订阅)

事件

Observable跟Observer通过Subscribe()方法实现订阅关系。从而使Observable在需要的时候通知Observer。

优点:异步处理简单、代码简单

rxandroid RxJava 的 Android 绑定

动画:

lottie json动画库

AVLoadingIndicatorView load动画库

图表绘制:

MPAndroidChart 强大的图表/图形视图库,支持折线图、饼图、雷达图、气泡图和烛台图等

权限适配:

rxpermissions 由 RxJava2 提供支持的 Android 运行时权限

permissionsdispatcher 用于处理 Android 运行时权限的声明式 API

Android 模块化、组件化、插件化、热修复的区别

Android 模块化、组件化、插件化、热修复的区别_android分包、热修复、插件化区别-CSDN博客

模块化:功能模块化,module

组件化:基于模块化,在打包时是library,jar包

插件化:也是属于模块化的一种体现。将完整的项目按业务划分不同的插件,分治法,越小的模块越容易维护。单位是apk,一个完整的项目。作用与组件化不同于热更新,灵活性在于加载apk,按需下载,动态更新。

浅谈Android插件化 - 掘金

插件化实现原理简单概括三步:

通过dexclassloader加载。

代理模式添加生命周期。

hook思想跳过清单验证。

想让插件的Apk真正运行起来,首先要先能找到插件Apk的存放位置,然后我们要能解析加载Apk里面的代码。

​ 但是光能执行Java代码是没有意义的,在Android系统中有四大组件是需要在系统中注册的,具体来说是在 Android 系统的 ActivityManagerService (AMS)PackageManagerService (PMS) 中注册的,而四大组件的解析和启动都需要依赖 AMSPMS,如何欺骗系统,让他承认一个未安装的 Apk 中的组件,如何让宿主动态加载执行插件Apk中 Android 组件(即 ActivityServiceBroadcastReceiverContentProviderFragment)等是插件化最大的难点。

​ 另外,应用资源引用(特指 R 中引用的资源,如 layoutvalues 等)也是一大问题,想象一下你在宿主进程中使用反射加载了一个插件 Apk,代码中的 R 对应的 id 却无法引用到正确的资源,会产生什么后果。

由于Android中的组件(Activity,Service,BroadcastReceiver和ContentProvider)是由系统创建的,并且由系统管理生命周期。 仅仅构造出这些类的实例是没用的,还需要管理组件的生命周期。其中以Activity最为复杂,不同框架采用的方法也不尽相同。插件化如何支持组件生命周期的管理。 大致分为两种方式:

  • 运行时容器技术(ProxyActivity代理)
  • 预埋StubActivity,hook系统启动Activity的过程

热修复:修复bug的

热修复与插件化都利用classloader实现加载新功能。不同的是热修复是为了修复bug,所以要将新的同名类替代同名的bug类,要抢先加载bug类之前加载新的类。插件化只是增加新的功能或资源文件,所以不涉及抢先加载旧类的使命。插件化比热修复简单,热修复在插件化基础上实现替换旧类bug。

Android MVC、MVP、MVVM、MVI

MVC:Activity、Fragment作为Control里面有太多的逻辑处理

MVP:View是布局跟Activity等,定义presenter分担原来Activity中的逻辑。通过接口回调Activity

MVVM:因为presenter的逻辑太复杂,使用View-Model代替presenter,将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。

Jatpack

JetPack到底是什么?带你认识JetPack - 知乎

Architecture(架构组件)

Architecture指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,本系列也是围绕着架构组件进行讲解。

Lifecycles(生命周期)

一点点入坑JetPack:Lifecycle篇 - 简书

用于管理Activity和Fragment的生命周期

原理:标准的观察者模式,监听Activity/Fragment的生命周期

DataBinding

以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。

ViewModel

ViewModel: 以生命周期的方式管理界面相关的数据,通常和DataBinding配合使用,为开发者实现MVVM架构提供了强有力的支持。

LiveData

LiveData: 在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规observable不同,LiveData是生命周期感知的。

Navigation

Navigation:处理应用内导航。

Paging

Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用。

Room

Room:友好、流畅的访问SQLite数据库。它在SQLite的基础上提供了一个抽象层,允许更强大的数据库访问。

WorkManager

WorkManager: 管理Android的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。

Foundationy(基础组件)

基础组件提供横向功能,例如向后兼容性、测试、安全、Kotlin 语言支持,并包括多个多个平台开发的组件。

Android KTX:优化了供Kotlin使用的Jetpack和Android平台API。帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发。

AppCompat:帮助较低版本的Android系统进行兼容。

Auto: 开发Android Auto应用的组件,提供了适用于所有车辆的标准化界面和用户交互。

检测:从AndroidStudio中快速检测基于Kotlin或Java的代码。

多Dex处理:为具有多个Dex文件应用提供支持。

安全:安全的读写加密文件和共享偏好设置。

测试:用于单元和运行时界面测试的Android 测试框架。

TV: 构建可让用户在大屏幕上体验沉浸式内容的应用。

Wear OS:开发Wear应用的组件。

Behavior(行为组件)

行为组件可帮助开发者的应用与标准Android服务(如通知、权限、分享)相集成。

CameraX:帮助开发简化相机应用的开发工作。它提供一致且易于使用的界面,适用于大多数Android。设备,并可向后兼容至Android 5.0(API 21)。

DownloadManager:处理长时间运行的HTTP下载的系统服务。

媒体和播放:用于媒体播放和路由(包括Google Cast)的向后兼容API。

通知:提供向后兼容的通知API,支持Wear和Auto。

权限:用于检查和请求应用权限的兼容性API。

设置:创建交互式设置,建议使用AndroidX Preference Library库将用户可配置设置集成到应用中。

分享操作:可以更轻松地实现友好的用户分享操作。

切片:切片是一种UI模板,创建可在应用外部显示应用数据的灵活界面元素。

UI(界面组件)

Animation and Transition:该框架包含用于常见效果的内置动画,并允许开发者创建自定义动画和生命周期回调。

Emoji Compatibility:即便用户没有更新Android系统也可以获取最新的表情符号。

Fragment:组件化界面的基本单位。

布局:用XML中声明UI元素或者在代码中实例化UI元素。

调色板:从调色板中提取出有用的信息。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值