自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 资源 (23)
  • 收藏
  • 关注

原创 flutter学习--列表组件

flutter中常用的列表组件为ListView和GridView,本文将2种组件实现步骤和多种实现方式做个讲解。一、ListView能够实现静态加载和动态加载。所谓的静态加载就是需要设置好Listview所加载的子view,数量已定。所谓的动态加载就是子view数量不定。1、静态加载(1)源码属性:有几个比较重要的属性:scrollDirection:滚动方向itemExten...

2019-12-27 15:26:01 769 1

原创 flutter学习--布局组件

常用的布局组件包括AppBar、Center、Container、Column、Row、SizeBox等。一、AppBar相当于android中的标题栏(1)源码属性:(2)

2019-12-26 16:19:50 556

原创 flutter学习--基础组件

开发中常用的基础组件,包括Text、Image、TextField、Text.rich、ClipOval等。一、Text文本组件,相当于android中的TextView控件。(1)看一下源码属性:data是必传参数,其他是可选参数。(2)使用class TextWidget extends StatelessWidget { @override Widget build(B...

2019-12-25 10:07:25 207

原创 性能优化-apk瘦身

作为应用的使用者而言,apk的体积越小当然是越喜欢的。这样不仅能节省手机的存储空间,并且在应用市场下载的速度也快加快。所以,对于开发者来说,了解常用的apk瘦身技术是不可避免的。一、图片瘦身1、webP使用先看一张截图原始图片为png格式,大小为38.5kb,经过转换后大小为6.7kb,仅仅是原图的17%。但是使用webP要求手机最低支持版本为api18 计版本4.3。如果你需要从4.0...

2019-12-18 14:04:19 325

原创 性能优化--哈夫曼算法原理

大家都知道,使用哈夫曼压缩能达到无损压缩,也就是说。保证了原图质量的同时,能够降低图片的大小。这是什么原理呢?首先我们需要了解的是Android系统加载图片使用的是Skia加载库,当然这个库的底层还是是用的jpeg对图片进行压缩处理,但是为了能够适配低端的手机(这里的低端是指以前的硬件配置不高的手机,CPU和内存在手机上都非常吃紧 性能差),由于哈夫曼算法非常吃CPU,被迫用了其他的算法。所以Sk...

2019-12-17 13:56:27 1910

原创 性能优化--启动黑白屏优化

相信大家都会有这样的经历,就是新创建的项目运行app后,发现会出现短时间的白屏或黑屏,然后才进入主界面。为什么会出现这样的现象呢?谷歌工程师出于怎样的考虑呢?我们该如何解决呢?基于这样几个问题,开始分析。一、手机启动流程当我们点击开机的时候,首先会通过引导芯片启动Linux内核,通过它会创建init进程,然后孵化出Zygote进程。然后Zygote进程孵化出SystemServer进程,初始...

2019-12-04 13:52:28 408

原创 性能优化--handler内存泄漏分析

开发中,如果代码不规范很容易产生内存泄漏,比如Handler、Context、线程等使用。本文使用Android Studio自带的Profiler和MAT工具进行内存泄漏分析。一、内存泄漏1、定义handlerprivate Handler mHandler = new Handler(new Handler.Callback() { @Override p...

2019-11-22 17:43:28 258

原创 性能优化--垃圾回收器

首先需要了解JVM的内存管理,分为两大块:共享区内存:堆,方法区独占区内存:虚拟机栈、本地方法栈、程序计数器具体的可以参考我的另外一篇文章**JVM内存管理 。**其中程序计数器是负责程序的执行操作,比如一个程序执行到第10行代码,另外一个程序开始执行。当另外一个程序完成后,就需要回到之前的第10行继续执行。这就需要程序计数器进行分配调度了。一、垃圾标记算法1、引用计数法引用计数法...

2019-11-07 17:46:56 156

原创 android 8.0源码分析activity启动流程

当我们点击桌面图标的时候,会通过Launch应用,启动另外一个进程来启动当前应用的activity。那么这个activity的启动流程是怎样的呢?当然这一部分分为两个关键点:application启动activity启动一、application启动二、activity启动...

2019-10-28 15:05:06 6474

原创 架构师学习--butterknife原理解析

之前有介绍过IOC实现布局、控件、事件的运行时注解。里面使用了大量的反射,难免会影响性能。显而易见,我们常用的butterKnife并没有使用这种技术,而是使用了APT技术,编译时完成这些操作,这样和原始性能相差无几,不过这样会增加apk的体积。下面将学习它的实现原理。一、使用1、gradle配置加入以下依赖// 依赖库 implementation 'com.jakewharto...

2019-10-09 16:50:57 286

原创 架构师学习--IOC方式实现布局、控件、事件依赖

项目中通过findViewById方式来初始化控件显得代码很臃肿,并且类之间的耦合度很高。为了解决这个问题,有两种方式可以实现:IOC:反射+注解方式,运行时处理APT:比如butterKnife,编译期处理下面将用IOC的方式实现布局控件的运行时注解。一、布局注解1、创建布局注解类@Target(ElementType.TYPE)@Retention(RetentionPoli...

2019-10-09 14:40:07 177

原创 架构师学习--rxjava线程切换

比如有这么一个需求:网络上下载一张图片,然后显示在界面上。常规的做法可能就是开一个子线程负责网络图片的下载,得到图片后,通过Handler发送到UI线程进行界面的更新。这样写,当然也没有问题,但是,这样会显得代码四分五裂,可读性不是很强。但是通过rxjava的链式调用以及线程切换,这样的需求同样能够实现,并且代码的阅读性很强。一、线程模式1、四种线程模式Schedulers.io(): ...

2019-09-27 10:42:50 311

原创 架构师学习--rxjava背压模式

什么是背压模式,在rxjava1系列是没有背压模式的,但是在rxjava2中加入了背压。那是因为在rxjava1中,如果上游不停地发射,下游处理不过来(阻塞),就会出现内存泄漏。为了解决这个问题,就引入了背压。背压的上游被观察者是Flowable,下游观察者是Subscriber。使用方式和Observable极为相似。了解到背压,就不得不说背压的几种策略模式:ERROR:上游不停的发射大量事...

2019-09-26 17:29:26 291

原创 架构师学习--rxjava操作符(合并型操作符、异常型操作符)使用

一、合并型操作符1、startWith操作符2、concatWith操作符3、concat操作符4、merge操作符5、zip操作符

2019-09-23 10:28:59 213

原创 架构师学习--rxjava操作符(过滤型操作符、条件型操作符)使用

一、过滤型操作符1、filter操作符测试代码如下:运行结果如下:这里只打印了3。总结:test方法,返回true,表示不过滤,直接发射到下游。test方法,返回false,表示过滤,不会发射到下游。2、take操作符测试代码如下:运行结果如下:总结:需要配合定时器操作符才能体现take操作符的真正价值当定时器执行take设置的个数后,就会停止计时。3、...

2019-09-20 17:34:48 169

原创 架构师学习--rxjava操作符(创建操作符、变换操作符)使用

大家都清楚,Rxjava的问世给我们程序员带来了一大波福利,简单的链式调用就能实现比较复杂的功能,并且逻辑清晰,易于扩展。但是,对于它的学习,还是需要一定的时间成本的。其实它的设计模式主要就是观察者模式,只不过它不是标准版的观察者,它的一个被观察者(Observable)只能对应一个观察者(Observer),并且通过subscribe进行订阅观察者。,下面带大家学习,常用的Rxjava2操作符。...

2019-09-20 14:43:38 159

原创 架构师学习--okhttp3责任链模式(包含请求封装和结果解析)

之前原理解析中说到,okHttp3使用了责任链模式添加了很多的拦截器,比如重试拦截器、请求头拦截器等等。有了这些拦截器,就可以把网络请求的不同部分交给各自拦截器实现,然后将拦截器处理的结果拼接成一个完整的请求实体,交给服务器。...

2019-09-06 16:58:03 384

原创 架构师学习--手写Glide之复用池

首先了解为什么需要复用池的设计?之前有说过,内存缓存采用LruCache缓存机制,在某个时刻系统会回收或者当我们手动回收一张内存中的图片时,就会将这张图片的内存加入到复用池中,这样当下一次申请图片内存的时候,收钱会从复用池中查找有没有合适的内存,有的话就会复用这块内存,没有的话就会重新开辟一块内存,这样做的好处就避免了内存的不断回收、申请而导致的内存抖动和内存碎片。一、接口BitmapPool...

2019-09-05 16:20:20 450

原创 架构师学习--手写Glide之磁盘缓存

前面学习了活动缓存和内存缓存,本章将继续学习磁盘缓存,在内存缓存中我们使用了最少使用算法,并且android也提供了LruCache这个类供我们使用,同样的磁盘缓存也是使用了这个算法,但是遗憾的是android没有提供磁盘缓存的类。所以,我们不得不从github上下载大神的DiskLruCache文件了。下载地址,解压得到三个文件,添加到我们的项目中即可。磁盘缓存类1、初始磁盘缓存类DiskL...

2019-08-30 17:54:21 257

原创 架构师学习--手写Glide之内存缓存

之前一篇文章带大家学习了活动缓存,本章将继续学习内存缓存。首先使用了LruCache算法(最近使用)缓存策略,什么是LruCache算法呢?这里对算法内部具体实现不做研究。先看一下android提供的源码:一、LruCache内部其实就是使用了LinkedHashMap的机制,设置为true,表示激活使用排序。使用排序的规则是如何呢?如下图:总之一句话:只要集合中某个元素被使用了,它将会...

2019-08-30 17:17:09 198

原创 架构师学习--手写Glide之活动缓存

Glide是目前市场上比较流行的图片加载框架,使用起来很方便,一堆链式调用就可以加载一张网络图片了。第一次加载会比较慢,当我们下次再次加载这张图片的时候,速度将会质的飞跃。这是因为它的图片缓存机制做的非常好。从源码中可以看出,他会用了三级缓存策略,分别是:活动缓存、内存缓存、磁盘缓存。本章将会讲解活动缓存是如何进行设计的一、缓存策略说到缓存策略,就不得不说一下,四种引用的区别了:强引用比...

2019-08-30 16:40:45 839 1

原创 架构师学习--okhttp3连接池实现

首先我们需要明白,okhttp比其他网络请求框架的优势在哪里?当然最重要的就是他对传输层的Socket进行了进一步的封装。所谓的封装,就是拿到服务器最原始的数据流,进行解析,返回给用户。大家需要明白一点,socket的连接是需要消耗资源的,如果每一次网络请求都去创建一个socket,显然是不合理的。所以okhttp就引出了连接池的概念。所谓的连接池就是为了复用socket,比如我们请求一个地址,如...

2019-08-29 16:47:48 986

原创 架构师学习--okhttp3原理解析

okhttp是目前最流行的网络框架,为什么这样说呢?本文将带领大家逐步解密。一、使用想必大家在项目中都是如下使用的,这里以一部请求为例:这里可以看出发出一条请求,离不开这几个类:OkHttpClientRequestCallCallback下面就对这四个类逐个击破。二、常用类介绍1、OkHttpClient这个类使用构造者模式,通过这个类我们能够设置分发器Dispatc...

2019-08-23 15:57:24 508

原创 架构师学习--数据库升级

我们在平常项目中难免会碰到这样的情况,比如我想在用户表中增加一个字段,来采集用户行为信息。比较常规的做法可能就是,重新测试打包上架,然后提示用户更新app。但是如果用户不更新呢?这样我们就无法采集到这个字段,另外重新打包上架的时间成本也是昂贵的,往往会导致用户的流失。那么有没有一种方法,类似于热修复,在用户无感知的情况下完成这样的数据库表升级呢?其实目前比较主流的做法就是配置xml文件的方式,用户...

2019-08-22 11:39:52 167

原创 架构师学习--数据库分库

学习本文内容,需要先去自行阅读架构师学习–数据库框架的基本搭建(增删改查)这篇文章,因为代码都是基于之前的基础上进行开发的。开始之前,我提出几个问题:什么是分库?为什么要分库?如何分库?一、什么是分库所谓的分库就是创建多个db数据库,比如项目中可以有qb.db。当然也可以有1.db、2.db等,根据自己的需求而定,一般小中型的项目是很少用到分库的,比如像淘宝、QQ等这样的大型项目,不可避免的会...

2019-08-21 17:34:05 270

原创 架构师学习--数据库框架的基本搭建(增删改查)

本文主要实现如何搭建一套自己的数据库框架。包括数据库的创建、表的创建、数据的增删改查功能、以及数据库如何实现分库、如何进行更新。一、创建数据库及生成数据库表如何使自己的数据库表的创建以更加优雅的方式,我们就需要注解的方式实现。1、创建表名注解类Table2、创建表中字段注解类FieldParams3、创建实体类中不需要保存到数据库的字段注解类Exclude4、创建数据库表实体类S...

2019-08-21 15:44:40 1440

原创 架构师学习--插件化之Hook方式(5.0版本~9.0版本)

首选,当我们启动一个activity,在没有在配置文件注册的前提下,会抛出以下异常:一、异常分析那么首先我们需要分析这个异常是在哪里出现的?源码跟踪如下:在checkStartActivityResult()方法中就能看到上面的异常信息。那么如何才能不让系统报这个异常呢,那就需要在这个方法执行之前做些手脚了。查看系统源码,在执行checkStartActivityResult()方法之前...

2019-08-13 17:01:54 560

原创 架构师学习--插件化之占位式静态注册广播(apk解析原理)

首先需要知道静态广播是在什么时候注册的?带着这个疑问就不得不分析apk的解析原理。一、apk解析原理1、静态广播注册首先,手机在启动的时候,会把所有的apk的都安装一遍,然后立马就会解析所有apk的配置文件信息,如果配置文件中有广播,就会把它注册。2、apk安装过程会产生3个目录data/app : apk的放置目录data/data/包名/ :应用所属目录,也就是数据库、sp等保存...

2019-08-09 17:51:05 305

原创 架构师学习--插件化之占位式(插桩式)

什么是插件化?插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk。插件apk是不需要安装的,运行在手机上的是宿主apk,当需要插件内容的时候,就需要通过宿主apk先加载插件,然后才能操作插件,也就是说插件是没有独立运行环境的,必须依赖宿主的环境。学习插件化,需要了解宿主、插件和标准的关系宿主:运行在手机上的apk插件:服务器上下载的apk包,没有...

2019-08-08 17:40:23 304

原创 架构师学习--组件化开发之管理类

前面介绍到组件化的ARouter路由设计和参数传递设计。只是功能进行了实现,没有考虑到进一步的封装,比如界面传参,之前是用如下方式实现:new Main_MainActivity$$Parameter().loadParams(this);这样看起来会比较难以理解,因为使用者并不知道生成了Main_MainActivity$$Parameter()这个类。同样的界面跳转之前使用如下方式: ...

2019-08-01 10:18:54 295

原创 架构师学习--组件化开发之路由参数传递

本章主要讲解组件化是如何实现组建之间参数传递的,代码基于之前一章内容架构师学习–组件化开发之路由ARouter设计一、如何实现模块之间参数的传递1、通过getIntent()传统方式2、通过javapoet最终生成的文件格式如下:二、代码生成1、创建参数注解2、创建注解处理器(1)遍历Parameters节点(2)解析Parameters节点,并保存到mapmap集合...

2019-07-29 17:00:25 257

原创 架构师学习--组件化开发之路由ARouter设计

使用过阿里开源项目ARouter路由框架的都知道,为组件化开发打开了一扇大门。使用组件化的目的就是解决团队开发,各自负责各自的模块,互不干扰,模块之间能够完全解耦,加快开发效率。这样做还有一个好处就是,如果有一个功能模块不需要了,可以在app中删除该模块的依赖即可,不需要大量的删除代码。核心技术是Javapoet,没有了解它的可以看另外一篇文章javapoet简单实用一、如何实现模块之间acti...

2019-07-29 15:54:42 302

原创 架构师学习--组件化开发之Gradle配置

Gradle其实是一个构建工具,它是用来帮助我们构建app的,构建包括编译、打包等过程。其实AS默认就为我们的app完成构建,并且每一个module的构建过程都是大同小异的,那么我们就可以提取共同点,比如公共的第三方库等,并且在组件化开发中必然离不开它。一、简单使用创建一个工程,默认会构建app,自己新建一个module,命名为library。...

2019-07-26 13:35:11 323

原创 架构师学习--动态换肤

11

2019-07-25 15:43:52 482

原创 架构师学习--内置换肤

一、换肤原理首先需要明白以下几点:setContentView()原理布局加载工程Factory2super.onCreate()原理如何拦截Factory2下面就以上几点进行源码分析1、 setContentView()(1)都知道通过setContentView()能够加载布局,那么布局是xml文件,它是如何加载到内存中的呢?首先跟踪源码,最终会跟到AppCompatDel...

2019-07-24 13:58:15 287

原创 架构师学习--组件化开发之APT使用及JavaPoet

一、概念及作用什么事是APT?全称是Annotation Processing Tool,翻译过来就是注解处理工具,它的作用就是可以在代码编译期间对注解进行处理,并且生成Java文件,减少手动的代码输入,因此它能够使我们编写的代码更加优雅。目前很多优秀的第三方库就是使用APT的技术,比如butterknife、retrofit、enentBus等。二、使用1、在当前工程中创建注解的java ...

2019-07-15 22:59:44 342

原创 Binder原理之PMS工作原理和代码模拟

1111

2019-07-14 14:00:57 503

原创 Binder原理之Apk安装原理

12

2019-07-12 17:05:43 353

原创 Binder原理之PMS、AMS注册到ServerManager

先上一张流程图,稳住军心,对着流程图分析更加有信心一、什么是SystemServer源码位置:frameworks/base/services/java/com/android/server/SystemServer.javaSystem Server是android 基本服务的提供者,是android系统运行的最基本需求,所有service运行在一个叫system_server...

2019-07-11 17:09:05 637

原创 Binder原理之Client端、Server端、Binder驱动、ServerManager

Binder在android中无处不在,它提供了android应用间跨进程的能力。其中aidl接口就是Binder的辅助工具,详解参考文章Binder原理解析附上自己花的流程图

2019-07-11 16:00:15 392

mockserver1.zip

mockServer模拟服务器数据请求,使用java命令启动服务器,数据源配置在json文件中,精准匹配数据的请求与返回。

2020-05-29

mockServer+nodejs+express.zip

mockServer模拟服务器请求,方便移动端优先开发,需要配合nodejs启动服务,只需要本地配置好json格式的数据格式即可,使用起来很方便

2020-05-29

LazyFragment.zip

分析v4版本和androidX版本懒加载机制原理,并实现不同版本的懒加载实现。可以直接拿到项目中使用

2020-03-27

MyMvvmMaster.zip

使用MVVM+rxjava2+retrofit+ARouter实现自己的一套app框架,使用起来简单方便。

2020-03-24

MVVM_Adapter.zip

代码实现了MVVM如何与RecyclerView记性绑定实现,列表的加载,点击,以及布局的加载。初学者可以看看,代码提供思路,不保证没有bug

2020-03-23

permissionDemo.zip

6.0系统手机开始,申请权限需要动态申请,市面上的框架也比较多,官方提供的RxPemission。也有使用发射实现的。我这个框架采用了AspectJ+注解的形式完成。使用起来很方便

2019-12-31

MyHuffman.zip

代码支持huffman对图片的压缩,使用jni方式。实现图片的无损压缩,压缩比例20%~90%,可调整图片的压缩质量

2019-12-17

okhttp中连接池实现

代码中包含okhhtp中连接池的设计,包含连接对象的添加,连接对象何时被移除。

2019-08-29

android数据库框架

代码主要提供了一套数据库操作的框架,包括增删改查、数据库的分库、升级等功能。便于扩展

2019-08-21

hook式插件化,兼容5.0~9.0

代码主要处理插件化开发,使用hook的方式,支持5.0到9.0系统,只是一个demo。

2019-08-13

占位式插件化

使用占位式插件化,能够实现插件的安装,及宿主到插件的跳转,插件内部跳转,启动插件服务,注册动态广播和发送广播。另外,对插件中静态广播的注册也做了实现

2019-08-08

组件化ARouter开发完整代码

组件化ARouter开发完整代码,模块之间完全解耦,支持参数注解,类注解

2019-08-01

安卓组件化开发架构,设计思路,代码大全

使用javapoet完成组件化架构设计,纯java代码,兼容性高

2019-07-29

app动态换肤,适配5.0到9.0

app在内置换肤的基础上实现动态换肤,效率高。比普通的换肤效率快至少7倍。兼容性高5.0-9.0都可以使用

2019-07-25

动态换肤,适配5.0到9.0

app在内置换肤的基础上实现动态换肤,效率高。比普通的换肤效率快至少7倍。兼容性高5.0-9.0都可以使用

2019-07-25

app内置换肤,效率高,适配高

用最简单的方式实现app内置换肤,支持自定义控件,运行效率高

2019-07-24

x264与rtmpdump集成.java

里面包含了如何把x264与rtmpdump集成到android studio中

2019-05-30

2.2.4-Shell脚本编写与执行编译ffmpeg库.zip

linux编译ffmpeg,需要首先配置ndk环境。编译静态库需要脚本执行,详解地址https://blog.youkuaiyun.com/qinbin2015/article/details/90648208

2019-05-29

bzip2-1.0.5-src.zip

增量更新android端cmake配置需要改文件夹下的一些文件。

2019-05-28

android各种布局的下拉刷新上拉加载更多

属于android工具包,包含scrollview,listview,spandlistview,gridview等布局的下拉刷新,下拉加载更多

2016-01-12

Imageloder加载网络图片,点图片看大图,可缩放

Imageloder加载网络图片,点图片看大图,可缩放。欢迎点评

2015-06-26

复选框多选Demo

包括一个全局的全选按钮,每一项的全选按钮,单选按钮。实现类似淘宝购物车选中功能

2015-06-24

仿淘宝评价图片上传,最多9张

功能实现仿淘宝评价图片上传,点击“+”图标添加图片,最多9张。点击已添加的图片删除图片,框架已搭好。数据可以自己填充。

2015-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除