程序亦非猿

Build Better Apps.

RTFSC

# RTFSC Read The Fucking Source CodeRTFSC 初衷&为什么要阅读源码随着做Android开发时间越来越久,看别人的文章博客对自己的收益越来越少,以前看10篇文章,可能9篇对自己有用,后来慢慢减少,8 7 6..1 。 再加上现在国内的风气不好,标题党特别多,质量好的文章太少,在茫茫文章中获取有用信息变得越来越困难。 投入与回报不成比例,所以需......

Android多渠道打包技术对比

前言 本文整理自我去年在公司内部做的一次分享,去掉了公司的信息,整理出来分享一下。希望对读者有所帮助。 加入公司后,就一直负责App的多渠道打包,今天来分享一下多渠道打包技术的介绍与对比,以及我们最后的选择。 什么是多渠道打包技术我们知道,由于某种黑暗力量,Android的亲爹市场 GooglePlay 不能进入大陆,导致大陆 Android 市场众多,如:小米、豌豆荚、华为等等等。 ......

invalidate和postInvalidate的关系与区别

引言我们知道,当我们需要重绘一个 View 的时候(onDraw ),通常我们有两个方法可供选择,invalidate 和 postInvalidate。 那么它们之间的关系与区别是什么呢? 本篇从源码角度分析 invalidate 与 postInvalidate 之间的关系区别。 分析invalidate的代码调用路径: 1234567public void invalidate(......

LayoutInflater 源码分析(四)闪耀的彩蛋

BlinkLayout源码分析private static class BlinkLayout extends FrameLayout 首先,我猜,你肯定不知道有这个BlinkLayout的存在!!! 据我所知,没有一本书里讲到过它(反正我是没见过),甚至国内的博客都没有人提及过它!! 因为它隐藏的非常深,是LayoutInflater的静态内部类,是我在看LayoutInflate......

LayoutInflater源码分析(三)fragment 标签的处理

前言在上一篇LayoutInflater 源码分析(二)中分析了LayoutInflater对include以及merge标签的处理,但是并没有找到对fragment的处理痕迹。 本文将继续探索以求揭晓答案。 可能有同学不知道,在这里提一下fragment标签的使用方式: 1234567<fragment android:layout_width="match_parent" ......

LayoutInflater源码分析(二)include以及merge标签的处理

前言接上篇LayoutInflater 源码分析(一)之 inflate 深度分析 本篇继续对LayoutInflater进行源码分析,目标为分析LayoutInflater对include、merge、fragment等标签的处理原理以及onFinishInflate的调用时机。 merge 标签分析上篇我们讲到inflate方法中出现 Merge 的踪迹,代码如下: 12345......

LayoutInflater源码分析(一)inflate深度分析

简介public abstract class LayoutInflater LayoutInflater,布局填充器,从名字就可以看出它用于加载布局。 我们常用的方式大概如下: 12// 方法定义:inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)View view = L......

Context.getSystemService分析

引言Context.getSystemService(String) 方法是我们用来获取各种系统服务的手段,比如: 123LayoutInflater LayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);ActivityManager am = (Activit......

Space源码分析

简介public final class Space extends View Space是一个轻量的View,可以在布局中被用来创建间隙,常用于布局优化。 介于可能很多人根本不知道Space的存在!所以稍微提一下它的使用场景,比如以下场景的右侧小三角,就可以使用Space: 在两个三角之间放置一个Space,两三角分别位于它的上下,控制它的高度就能控制三角之间的间隔。 123456......

ViewStub是如何实现懒加载的

ViewStub简介public final class ViewStub extends View ViewStub 是一个宽高都为0,不可见的(GONE),不参与measure与layout(绝大部分情况),不绘制任何东西,可以用来做懒加载的View,常用于布局优化; PS: 为什么说绝大部分情况不参与测量与布局呢?因为大部分ViewGroup对于GONE的View,都不会让它......

Retrofit是如何工作的?

注:本文基于 Retrofit2.0版本,并配合 RxJava 来分析。com.squareup.retrofit2:retrofit:2.0.0com.squareup.retrofit2:converter-gson:2.0.0com.squareup.retrofit2:adapter-rxjava:2.0.0 ​ ​ Retrofit adapts a Java i......

strings文件中修改部分字体颜色

在 Android 开发中,通常会吧文本放在 strings.xml 文件中,然后再引用。 有时候,有些需求需要修改文本中的部分字的字体颜色,可以用以下方式修改: 修改原本的strings.xml: 1<string name="hh_no_order"><![CDATA[sorry,没有任何订单,<font color="#fc2a56">前往买买买</......

访问者模式

设计模式专题系列: 设计模式 访问者模式当你想要为一个对象的组合(组合模式)增加新的能力,且封装并不重要时,就使用访问者模式。 用途: 当采用访问者模式的时候,就会打破组合类的封装。 优点: 允许你对组合结构加入新的操作,而无需改变结构本身。 想要加入新的操作,相对容易。 访问者所进行的操作,其代码是集中在一起的。 缺点: 因为游走的功能牵涉其中,......

原型模式

设计模式专题系列: 设计模式 原型模式当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式(Prototype Pattern)。 原型模式允许你通过复制现有的实例来创建新的实例(在Java中,这通常意味着使用clone()方法,或者反序列化)。 原型模式的重点在于,客户端的代码在不知道要实例化何种特定类的情况下,可以制造出新的实例。(?不太理解) 用途: 在一个复杂的类层......

备忘录模式

设计模式专题系列: 设计模式 备忘录模式当你需要让对象返回之前的状态时(例如,你的用户请求“撤销”),就使用备忘录模式。 备忘录的目标: 储存系统关键对象的重要状态。 维护关键对象的封装。 咦,那Activity、Fragment、View的 onSaveInstanceState 不就是备忘录模式吗? 用途: 备忘录用于存储状态。 优点: 将被储存的状态放在外面,不要......

中介者模式

设计模式专题系列: 设计模式 中介者模式使用中介者模式来集中相关对象之间复杂的沟通和控制方式。 每个对象都会在自己的状态改变时,告诉中介者 每个对象都会对中介者锁发出的请求作出回应 没有中介者的情况之下,所有的对象都需要认识其他对象,也即对象之间是紧耦合的.当有了中介者后,对象之间不需要认识,只需要跟中介者打交道,这样一来对象之间就被解耦了. 中介者包含了整个系统的控制逻辑. ......

解释器模式

设计模式专题系列: 设计模式 解释器模式使用解释器模式为语言创建解释器. 用途: 当你需要实现一个简单的语言时,使用解释器. 当你有一个简单的语法,而且简单比效率更重要时,使用解释器. 可以处理脚本语言和编程语言. 可以处理脚本语言和编程语言. 优点: 将每一个语法规则表示成一个类,方便于实现语言. 因为语法由许多类表示,所以你可以轻......

蝇量模式

设计模式专题系列: 设计模式 蝇量模式如果想让某个类的实例能用来提供许多”虚拟实例”,就使用蝇量模式。 用途: 当一个类有许多的实例,而这些实例能被同一个方法控制的时候,我们就可以使用蝇量模式. 优点: 减少运行时对象实例的个数,节省内存. 将许多”虚拟”对象的状态集中管理. 缺点: 蝇量模式的缺点在于,一旦你实现了它,那么单个的逻辑实例无法拥有独立而不同的行为.......

责任链模式

设计模式专题系列: 设计模式 责任链模式当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式. 通过责任链模式,可以为某个请求创建一个对象链.每个对象依序检查此请求,并对其进行处理,或者将它传给链中的下一个对象. 拿Android来说,View的 onTouch 等方法都是使用了责任链模式. 用途: 经常被使用在窗口系统中,处理鼠标和键盘之类的事件(在Andr......

生成器模式

设计模式专题系列: 设计模式 生成器模式使用生成器模式封装一个产品的构造过程,并允许按步骤构造。 在Android中比较常见了,比如 Dialog,,另外在EffectiveJava的笔记中也有提到,就不多说了. 用途: 经常被用来创建组合结构. 优点: 将一个复杂对象的创建过程封装起来. 允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个步骤的工厂模式不同)......