- 博客(15)
- 资源 (23)
- 收藏
- 关注
原创 架构师学习--手写Glide之磁盘缓存
前面学习了活动缓存和内存缓存,本章将继续学习磁盘缓存,在内存缓存中我们使用了最少使用算法,并且android也提供了LruCache这个类供我们使用,同样的磁盘缓存也是使用了这个算法,但是遗憾的是android没有提供磁盘缓存的类。所以,我们不得不从github上下载大神的DiskLruCache文件了。下载地址,解压得到三个文件,添加到我们的项目中即可。磁盘缓存类1、初始磁盘缓存类DiskL...
2019-08-30 17:54:21 231
原创 架构师学习--手写Glide之内存缓存
之前一篇文章带大家学习了活动缓存,本章将继续学习内存缓存。首先使用了LruCache算法(最近使用)缓存策略,什么是LruCache算法呢?这里对算法内部具体实现不做研究。先看一下android提供的源码:一、LruCache内部其实就是使用了LinkedHashMap的机制,设置为true,表示激活使用排序。使用排序的规则是如何呢?如下图:总之一句话:只要集合中某个元素被使用了,它将会...
2019-08-30 17:17:09 173
原创 架构师学习--手写Glide之活动缓存
Glide是目前市场上比较流行的图片加载框架,使用起来很方便,一堆链式调用就可以加载一张网络图片了。第一次加载会比较慢,当我们下次再次加载这张图片的时候,速度将会质的飞跃。这是因为它的图片缓存机制做的非常好。从源码中可以看出,他会用了三级缓存策略,分别是:活动缓存、内存缓存、磁盘缓存。本章将会讲解活动缓存是如何进行设计的一、缓存策略说到缓存策略,就不得不说一下,四种引用的区别了:强引用比...
2019-08-30 16:40:45 806 1
原创 架构师学习--okhttp3连接池实现
首先我们需要明白,okhttp比其他网络请求框架的优势在哪里?当然最重要的就是他对传输层的Socket进行了进一步的封装。所谓的封装,就是拿到服务器最原始的数据流,进行解析,返回给用户。大家需要明白一点,socket的连接是需要消耗资源的,如果每一次网络请求都去创建一个socket,显然是不合理的。所以okhttp就引出了连接池的概念。所谓的连接池就是为了复用socket,比如我们请求一个地址,如...
2019-08-29 16:47:48 953
原创 架构师学习--okhttp3原理解析
okhttp是目前最流行的网络框架,为什么这样说呢?本文将带领大家逐步解密。一、使用想必大家在项目中都是如下使用的,这里以一部请求为例:这里可以看出发出一条请求,离不开这几个类:OkHttpClientRequestCallCallback下面就对这四个类逐个击破。二、常用类介绍1、OkHttpClient这个类使用构造者模式,通过这个类我们能够设置分发器Dispatc...
2019-08-23 15:57:24 432
原创 架构师学习--数据库升级
我们在平常项目中难免会碰到这样的情况,比如我想在用户表中增加一个字段,来采集用户行为信息。比较常规的做法可能就是,重新测试打包上架,然后提示用户更新app。但是如果用户不更新呢?这样我们就无法采集到这个字段,另外重新打包上架的时间成本也是昂贵的,往往会导致用户的流失。那么有没有一种方法,类似于热修复,在用户无感知的情况下完成这样的数据库表升级呢?其实目前比较主流的做法就是配置xml文件的方式,用户...
2019-08-22 11:39:52 149
原创 架构师学习--数据库分库
学习本文内容,需要先去自行阅读架构师学习–数据库框架的基本搭建(增删改查)这篇文章,因为代码都是基于之前的基础上进行开发的。开始之前,我提出几个问题:什么是分库?为什么要分库?如何分库?一、什么是分库所谓的分库就是创建多个db数据库,比如项目中可以有qb.db。当然也可以有1.db、2.db等,根据自己的需求而定,一般小中型的项目是很少用到分库的,比如像淘宝、QQ等这样的大型项目,不可避免的会...
2019-08-21 17:34:05 249
原创 架构师学习--数据库框架的基本搭建(增删改查)
本文主要实现如何搭建一套自己的数据库框架。包括数据库的创建、表的创建、数据的增删改查功能、以及数据库如何实现分库、如何进行更新。一、创建数据库及生成数据库表如何使自己的数据库表的创建以更加优雅的方式,我们就需要注解的方式实现。1、创建表名注解类Table2、创建表中字段注解类FieldParams3、创建实体类中不需要保存到数据库的字段注解类Exclude4、创建数据库表实体类S...
2019-08-21 15:44:40 1315
原创 架构师学习--插件化之Hook方式(5.0版本~9.0版本)
首选,当我们启动一个activity,在没有在配置文件注册的前提下,会抛出以下异常:一、异常分析那么首先我们需要分析这个异常是在哪里出现的?源码跟踪如下:在checkStartActivityResult()方法中就能看到上面的异常信息。那么如何才能不让系统报这个异常呢,那就需要在这个方法执行之前做些手脚了。查看系统源码,在执行checkStartActivityResult()方法之前...
2019-08-13 17:01:54 513
原创 架构师学习--插件化之占位式静态注册广播(apk解析原理)
首先需要知道静态广播是在什么时候注册的?带着这个疑问就不得不分析apk的解析原理。一、apk解析原理1、静态广播注册首先,手机在启动的时候,会把所有的apk的都安装一遍,然后立马就会解析所有apk的配置文件信息,如果配置文件中有广播,就会把它注册。2、apk安装过程会产生3个目录data/app : apk的放置目录data/data/包名/ :应用所属目录,也就是数据库、sp等保存...
2019-08-09 17:51:05 277
原创 架构师学习--插件化之占位式(插桩式)
什么是插件化?插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk。插件apk是不需要安装的,运行在手机上的是宿主apk,当需要插件内容的时候,就需要通过宿主apk先加载插件,然后才能操作插件,也就是说插件是没有独立运行环境的,必须依赖宿主的环境。学习插件化,需要了解宿主、插件和标准的关系宿主:运行在手机上的apk插件:服务器上下载的apk包,没有...
2019-08-08 17:40:23 276
原创 架构师学习--组件化开发之管理类
前面介绍到组件化的ARouter路由设计和参数传递设计。只是功能进行了实现,没有考虑到进一步的封装,比如界面传参,之前是用如下方式实现:new Main_MainActivity$$Parameter().loadParams(this);这样看起来会比较难以理解,因为使用者并不知道生成了Main_MainActivity$$Parameter()这个类。同样的界面跳转之前使用如下方式: ...
2019-08-01 10:18:54 250
原创 设计模式--责任链模式
什么是责任链模式呢?所谓的责任链模式就是使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。比如现在比较流行的okHttp网络请求框架就是采用了责任链模式。下面将手写一个简易的责任链。一、IChain这是一个接口,所有的子链都需要实现该接口。isConsume:当前链条是否消费chain:责...
2019-08-26 17:58:18 239
原创 浅谈android中的线程池
什么是线程池?顾名思义,就是存放线程的池子,也就是说一个线程池中可以存放多个线程。那为什么要设计出来线程池呢?最主要的原因就是线程复用的原因。如果没有线程池,我们每次网络请求都需要new Thread。如果有100个任务同时执行,这样就会导致资源的开销非常大,而对于线程池来说。我们只需要把100个任务加入其中即可,它内部会维护一个队列。一、线程池的类属关系最原始的线程池类是一个接口Execut...
2019-08-23 17:41:58 177
原创 自定义控件之仿豆瓣笑脸进度加载
最近看到豆瓣的笑脸loading很有意思,看一张效果图:下面分析一下如何实现这样的效果:默认状态是一张笑脸的状态(一个嘴巴,两个眼睛,默认状态)开始旋转,嘴巴追上眼睛(合并状态)追上以后自转一周(自转状态)然后逐渐释放眼睛(分离状态)回到初始笑脸状态(默认状态)一、默认状态首先需要确定好嘴巴和眼睛的初始位置,我这里的初始化嘴巴是一个半圆,在横轴下方。眼睛分别与横轴夹角60度,...
2019-08-05 16:51:32 377
mockServer+nodejs+express.zip
2020-05-29
permissionDemo.zip
2019-12-31
2.2.4-Shell脚本编写与执行编译ffmpeg库.zip
2019-05-29
android各种布局的下拉刷新上拉加载更多
2016-01-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人