6 杨天睿

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2w+

常见平衡树(2-3树与红黑树原理与实现)

原文地址:https://kswapd.cn/article/twothreetree-and-rbtree/本文介绍下两种常见的平衡树,2-3树和红黑树,这两种树在工业级代码中有广泛的应用。其中红黑树可以看成是2-3树的进化版本,理解2-3树后,对理解红黑树的平衡过程很有帮助,所以建议大家按照顺序阅读。2-3树计算机科学中,2–3树是一种树型数据结构,内部节点(存在子节点的节点)...

2019-07-08 23:29:32

[Android] 智能指针sp与wp

智能指针sp与wp在AOSP中,Google实现了一套特有的智能指针系统,用来方便C++工程中的内存管理。内存释放是C++工程中非常难处理的一部分,为此一些C++工程都会有自己的智能指针系统,C++11的std中也提供了auto_ptr之类的智能指针的概念。从auto_ptr说起我们先看下C++ 11中的auto_ptr,这个比AOSP中的较容易理解。auto_ptr在memory.h中,...

2019-03-13 17:18:52

okHttp源码分析

整体设计OkHttp设计较为复杂,但是层次还算清晰,我把主要的类关系画了个图,大概是这样。OkHttp的类较多,这里只描述下重要的类关系,可以看出OkHttp的主要功能都集中在Interceptor中,通过Interceptor完成构建请求,建立Socket连接,建立SSLSocket连接,证书校验等步骤。我们看下Interceptor的调用过程:在这个拦截器设计中,我们可以对Requ...

2019-02-23 17:26:21

[Android] AOSP 开发并刷入Pixel

首先下载AOSP代码,这个可以参考以前的文章https://blog.csdn.net/y874961524/article/details/80725389上篇文章介绍了编译后启动模拟器,模拟器不需要驱动,所以比较容易,但是运行缓慢,下面我们学习将aosp编译到真机。这一步假设我们已经成功下载了AOSP代码,但是因为需要刷入真机,所以还需要下载驱动,重新编译等步骤。repo 使用AOS...

2019-02-09 15:00:31

[Android] GIF播放优化

背景:针对APP中大量的GIF播放场景进行优化,指标以内存占用,流畅性为主。目前Anroid上比较流行的GIF播放方案有Glide和android-gif-drawable,下面我们逐一进行分析,以及如何对现有方案进行优化。android-gif-drawable基本使用链接:https://github.com/koral--/android-gif-drawable这个是比较流行...

2019-01-22 16:17:37

[Android] Glide核心逻辑解析

Glide核心逻辑解析分三个模块进行,分别是Registry(注册器), Engine(请求),Cache(缓存)。Registry模块Registry的职责是注册Glide的所有组件,是Glide扩展的基石,目前在Registry中注册的组件有ModelLoaderFactory,ResourceDecoder, DataRewinder, Encoder。我们看下个组件职责:Mod...

2018-11-08 09:52:46

[Java] volatile的使用场景

volatile的使用场景volatile用处volatile是java中较轻量的同步原语,用volatile声明的变量保证了该变量的可见性, 使用volatile声明的变量被其他线程更改时,该变量会立即被写入内存,同时 CPU会锁住总线,将缓存同步指令传递到其他处理器,其他处理器会从主内存中获取该变量的最新值更新到自己的缓存中。如下面的代码,如果这个counter变量没有声明成volat...

2018-10-03 23:27:51

[Android] 记一次FileDescriptor泄漏造成的Crash

记一次FileDescriptor泄漏造成的Crash问题描述最近项目中一直偶现Native Crash,先看下log。09-29 10:46:47.530 24328-24328/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 24328 (com.bw.pk) 09-29 10:46:47.533 448-448/? I/MIUIN...

2018-09-30 13:05:20

[Android] ConstaintLayout性能分析

Android ConstaintLayout性能分析最近项目上大规模使用了ConstrainLayout,于是对性能进行一定的分析, 以及介绍一些使用心得。性能分析与RelativeLayout对比,基于HierarchyViewer之前网上也有部分关于ConstrainLayout性能分析的文章,大部分是基于HierarchyViewer的,下面是分析的结果。使用Constrai...

2018-09-24 14:11:55

[Android] 使用Gradle Plugin实现自动化屏幕适配

屏幕适配的必要性处理虚拟尺寸和设计稿之间的比例,如设计稿为375 x 667,我们需要将这个尺寸缩放到我们的虚拟尺寸上。处理个别手机虚拟尺寸不同的问题,让虚拟尺寸不同的手机显示相同的视觉效果。何为虚拟尺寸我们采用Android中的dp来作为单位来描述虚拟尺寸。下面先来解释下dp。概念解释我们需要先看下下面的几个定义:像素(PX): 屏幕上的物理点,是显示图像...

2018-09-02 18:55:38

Gradle Plugin实现检测Android项目运行时依赖

背景在Android开发过程中,我们会引入很多的第三方库,这些第三方库又会引入别的库,就可能出现版本不一致的问题。 Gradle在处理这种依赖冲突的策略是以版本最高(或指定)的版本打进APK包中。 这些问题在编译时无法发现,所以可能在运行时出现ClassNotFound,MethodNotFound之类的异常。例如:一个APK项目中,引入了ImageLoader和Album两个第三...

2018-07-10 22:37:41

Retrofit源码分析--Retrofit动态代理与CallAdapter的实现

目前打算选用Retrofit2+RxJava2作为网络请求框架,下面从源码角度分析下这两个框架是怎么粘合在一起的。看完本文,你将会看到: - 动态代理模式在Retrofit中的运用。 - 抽象工厂模式在Retrofit中的运用。 - RxJava2如何和Retrofit结合实现网络请求模块。使用Retrofit实现网络请求定义一个Service接口//ht...

2018-07-02 23:03:12

AOSP源码编译 --全部编译

最进一直在学习Android系统源码,当然搭建编译环境是第一步,我也是折腾了好久,个人觉得这个在学习Android过程中有里程碑意义的,因为以后过程中,自己的一些想法就能动手实现了。下载Android源码如果是MAC OS的话,需要在创建一个磁盘映像使用自带的磁盘工具,创建磁盘映像即可。 也可以使用命令行进行创建hdiutil create -type SPA...

2018-06-18 17:49:38

Android 解决Touch事件传递不连贯的问题

在事件分发的过程中,用于Android特有的事件分发机制,可能出现两个问题:子View在滑动过程中产生requestDisallowTouchEvent()导致父View没有办法拦截到事件的问题(父View没有回调onInterceptTouchEvent())。父View拦截事件并消耗,此时达到某个临界值,父View不再需要事件,但是子View无法从ACTION_MOVE事件直接开始处理...

2018-04-01 18:33:57

Android DLPlugin框架源码分析

参考:http://blog.csdn.net/singwhatiwanna/article/details/23387079 本文对DLPlugin插件化框架原理进行分析,DLPlugin实现简单,是我们探索插件化机制的第一步。使用ClassLoader加载插件类初始化DexClassLoader这里假设插件类在SDCard上,我们可以使用DexClassLoade...

2018-03-18 21:28:30

Android 进程创建流程(Context的创建)

Android APP进程的创建由ActivityThread这个类完成,下面本文分析下ActivityThread的初始化流程。流程介绍通过下面的流程图简单看下这个ActivityThread初始化的过程。 关键点:ActivityThread和AMS均为Binder对象,但是IActivityThread上有oneway关键字,所以系统调用IActivityThre

2018-02-04 20:59:29

Sugar ORM框架源码分析

Sugar目前来看是一个不错的ORM框架,我们分析下它的框架设计吧,通过分析框架一定能加深我们对代码的理解。Sugar的使用 http://satyan.github.io/sugar/getting-started.html整体来看Sugar的好处就是简单,毕竟它是基于反射实现的,但是可能会造成一定的性能问题。下面边根据使用来分析下实现。Mainfest文件中

2018-01-13 21:49:28

Mediator Pattern-中介者模式

中介者模式(行为型模式): 用一个中介者对象封装一系列的对象交互, 中介者使个对象不需要显示进行相互作用, 从而降低各类之间的耦合,可以独立的改变他们的交互中介者模式的组成抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消

2017-10-08 22:39:50

Android BitmapFactory 解码总结

使用BitmapFactory解码图片解码本地图片final BitmapFactory.Options option = new BitmapFactory.Options();// inDensity表示当前的Bitmap的像素密度option.inDensity = DensityUtil.densityDpi;// 使用inScale=true, 表示解码图片时允许图片缩放// op

2017-09-13 22:43:41

Android Z轴布局

如果需要在布局中创造一个层叠的概念,那么使用Android系统中的ViewGroup是不够的,但是可以通过改变ViewGroup的绘制顺序实现继承自FrameLayoutFrameLayout已经帮我们实现了子View的measure和layout过程,我们只需在它的基础上改变绘制顺序即可自定义LayoutParamslayoutParams的作用是向父布局请求布局参数(MeasureSpec),

2017-09-09 21:30:40

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!