[Android] 智能指针sp与wp

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

2019-03-13 17:18:52

阅读数 50

评论数 0

okHttp源码分析

整体设计 OkHttp设计较为复杂,但是层次还算清晰,我把主要的类关系画了个图,大概是这样。 OkHttp的类较多,这里只描述下重要的类关系,可以看出OkHttp的主要功能都集中在Interceptor中,通过Interceptor完成构建请求,建立Socket连接,建立SSLSocket连接,...

2019-02-23 17:26:21

阅读数 61

评论数 0

[Android] AOSP 开发并刷入Pixel

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

2019-02-09 15:00:31

阅读数 328

评论数 0

[Android] GIF播放优化

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

2019-01-22 16:17:37

阅读数 130

评论数 0

[Android] Glide核心逻辑解析

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

2018-11-08 09:52:46

阅读数 130

评论数 0

[Java] volatile的使用场景

volatile的使用场景 volatile用处 volatile是java中较轻量的同步原语,用volatile声明的变量保证了该变量的可见性, 使用volatile声明的变量被其他线程更改时,该变量会立即被写入内存,同时 CPU会锁住总线,将缓存同步指令传递到其他处理器,其他处理器会从主内存中...

2018-10-03 23:27:51

阅读数 479

评论数 0

[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 2432...

2018-09-30 13:05:20

阅读数 550

评论数 0

[Android] ConstaintLayout性能分析

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

2018-09-24 14:11:55

阅读数 191

评论数 0

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

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

2018-09-02 18:55:38

阅读数 258

评论数 0

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

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

2018-07-10 22:37:41

阅读数 182

评论数 0

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

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

2018-07-02 23:03:12

阅读数 125

评论数 0

AOSP源码编译 --全部编译

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

2018-06-18 17:49:38

阅读数 1709

评论数 1

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

在事件分发的过程中,用于Android特有的事件分发机制,可能出现两个问题: 子View在滑动过程中产生requestDisallowTouchEvent()导致父View没有办法拦截到事件的问题(父View没有回调onInterceptTouchEvent())。 父View拦截事件并消耗,...

2018-04-01 18:33:57

阅读数 321

评论数 0

Android DLPlugin框架源码分析

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

2018-03-18 21:28:30

阅读数 132

评论数 0

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

Android APP进程的创建由ActivityThread这个类完成,下面本文分析下ActivityThread的初始化流程。 流程介绍 通过下面的流程图简单看下这个ActivityThread初始化的过程。 关键点: ActivityThread和AMS均为Binder...

2018-02-04 20:59:29

阅读数 580

评论数 0

Sugar ORM框架源码分析

Sugar目前来看是一个不错的ORM框架,我们分析下它的框架设计吧,通过分析框架一定能加深我们对代码的理解。 Sugar的使用 http://satyan.github.io/sugar/getting-started.html 整体来看Sugar的好处就是简单,毕竟它是基于反...

2018-01-13 21:49:28

阅读数 498

评论数 1

Mediator Pattern-中介者模式

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

2017-10-08 22:39:50

阅读数 156

评论数 0

Android BitmapFactory 解码总结

使用BitmapFactory解码图片解码本地图片final BitmapFactory.Options option = new BitmapFactory.Options(); // inDensity表示当前的Bitmap的像素密度 option.inDensity = DensityUti...

2017-09-13 22:43:41

阅读数 383

评论数 0

Android Z轴布局

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

2017-09-09 21:30:40

阅读数 3019

评论数 0

自定义View实现百度Loading动画

基本绘制实现思路:先绘制背景色文字,然后讲Canvas裁切这个path路径,然后绘制白色的文字绘制正弦曲线这里使用贝塞尔曲线实现正弦曲线的绘制,使用ValueAnimator不断通知重绘 private Path getActionPath(float curPercent) { ...

2017-08-13 22:07:41

阅读数 218

评论数 0

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