自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 Jenkins Android自动化打包

公司一直使用的是人肉打包的方式,各种环境,配置项的变更,改来改去,非常容易出错,也影响开发人员的日常开发。特地研究下Jenkins来改善这一工作流程。首先需要下载Jenkins.https://jenkins.io/download/由于我是Mac,原先使用Mac OS X 时,jenkins会自动安装在共享目录下并新建jenkins用户,实际使用中发生了很多文件权限的烦恼,这次我直接下载个w...

2019-02-26 09:16:19 342 2

原创 ButterKnife 组件化改造的一次实践

android 开发中写过最多的代码估计就是findViewById了。自从大神JakeWharton开发出了ButterKnife,编码效率大大提升。8.4.0之前的版本在工程分多个模块的时候就不能使用了,后来大神继续修复轮子,在非主模块中我们需要用R2来代替。因为子模块中R不是final 修饰的,资源合并也会变更数值。最近要做组件化,本来使用最新版本的ButterKnife也没什么问题,偏偏我...

2019-01-22 20:47:03 445

原创 android-butterknife-zelezny插件源码分析

Butterknife做过android的人都知道,帮助我们少写了很多findViewById,setOnClickListener的机械代码。 Butterknife配合插件android-butterknife-zelezny使用起来,开发效率大大提升。一直感觉插件是很牛逼的东西,扩展了IDE的功能。平常需求迭代很忙,很遗憾没花时间自己写一些插件。今天借着研究Butterknife在组件化开发...

2019-01-18 17:30:35 734 3

原创 android 组件化框架CC源码简要分析

最近项目中引入一个组件化的框架CC,框架很新。我们抱着学习的态度欣赏这个框架的源码。这只是一部分供我们使用的代码,他有部分源码是操纵字节码,将用户静态的组件,初始化加入自己的static静态代码段。我们先从简单的开始分析,这个一个缓存的对象池。用到ConcurrentLinkedQueue并发队列做他的底层容易。两个接口Resetable,Initable分别对应,放入池中被reset和用所...

2018-12-25 11:26:44 1637 3

原创 RecyclerView.Adapter适配器通用化改造

RecyclerView 是谷歌给开发者的福利,比以往的ListView更加强大,性能更大,具体源码分析,我们下次讲。本篇主要介绍如何在项目中提炼代码,增强它的适配性。下面就介绍我的思路。首先一般编码有如下几个问题。1.列表数据,需要写一个RecyclerView.Adapter和一个ViewHolder。ViewHolder是根据不同布局而来,但RecyclerView.Adapter则包含...

2018-12-17 09:45:15 579 2

原创 java Class 类常用方法分析

Class类是Java中保存类信息的实例。里面有各种反射的方法,已经类的信息,掌握它,熟悉它,有助于我们日常的反射编程。Class是个泛型类,public final class Class<T> implements java.io.Serializable, GenericDeclaration, ...

2019-03-18 13:19:53 460

原创 AsyncTask源码分析

AsyncTask类是android开发中过去最常用的类。提供了异步编程范式,新建子线程,结果的主线程回调,进度的通知。AsyncTask是抽象泛型类,Params运行入参,Progress进度通知,Result结果回调。public abstract class AsyncTask<Params, Progress, Result> {ThreadPoolExecutor中配...

2019-03-13 19:37:29 157

原创 闲谈Android ListView设计

ListView 是安卓里面常用的列表控件,具有列表item复用等特点,今天我们通过源码来了解他的实现方式。我们先从它的祖宗说起。如果我们是google的设计师,需要设计符合现在功能的ListView,我们该如何入手。首先是数据与View的分离,他们中间可以通过一个桥(适配器)建立连接。所以先定义一个Adapter接口public interface Adapter {}Adapter中...

2019-03-09 10:53:12 287

原创 CopyOnWriteArrayList源码分析

前两天刚分析完了ArrayList,趁热打铁,接着来看CopyOnWriteArrayList。CopyOnWriteArrayList与ArrayList大部分的实现都是类似,只是在ArrayList的基础上加上了一个锁对象,对所有改变集合数据结构的操作加了同步代码块,现在的synchronized不再是之前那个稳定不变的mutex_lock重量级锁,而是借助mark_word等,在并发情况逐...

2019-03-07 19:47:12 151

原创 ArrayList源码解析

ArrayList是常用的容器类,大家都知道随机访问效率高,并发不安全,一般多线程的情况都不考虑它。但是如果有人问你为什么不安全,会出现哪些异常。可能不熟悉源码的话不能顺畅回答出来。下面我们根据源码分析下它的技术实现细节。ArrayList是一个泛型类,继承AbstractList 实现了List等接口,默认大小10,elementData用来存储数据,size记录存储数据的个数。静态常量EM...

2019-03-05 19:05:12 167 1

原创 ThreadLocal实现解析

java开发中经常要面对多线程访问数据的同步问题。ThreadLocal在一些场景下提供了解决方案。即分配给每个线程一份副本,线程只处理自己的数据副本,这样就避免多线程访问同一份数据的同步问题。ThreadLocal其实是一个泛型类。先看看常用的几个方法。get方法中首先获取当前线程,然后调用 getMap(t),获取一个ThreadLocalMap类。ThreadLocalMap是一个当前线程...

2019-03-04 09:18:43 123

原创 Android开发中MVP模式

传统的开发模式mvc大家都很熟悉。View负责页面展示,Model负责数据。 Controller一个控制协调前两者的关系,很常见,耦合关系也很明显。在常见的android应用开发中Activity类可以是非常复杂的代码集合,里面有各种view,事件,网络请求,数据bean。关联关系错综复杂。对代码复用,修改,重构产生了阻碍。之后又有了MVP,MVVM(双向绑定)。在MVC 中M/V之...

2019-01-04 15:29:52 232 1

原创 Android Room框架源码解析(一)

Room框架是Google开发,简化我们数据库操作的代码编写的框架。下面我们先展示一个范例。这个需求是班次历史记录,搜索过的线路的集合。一条线路包含出发站和到达站的信息。TrainLineDbBean是我们的业务bean也就是线路信息。 在room 框架中会添加注解使之成为一张表的抽象。Entity声明了表名为 “TRAIN_LINE”。新建索引名为"line"取{“startStatio...

2019-01-03 17:26:09 2967

原创 android ndk开发静态注册与动态注册

android ndk开发java调用c/c++的本地方法,存在两种方法,静态注册,和动态注册,framewor层采用的是后者。下面我们就两种方式做一下演示。实现功能是点击按钮,改变TextView字符,并弹Toast提示。MainActivity中System.loadLibrary(“native-lib”),声明native方法,还有一个tip,方法是给native调用的。完成一个交互...

2018-12-30 11:10:31 538

原创 android startActivity函数调用步骤收集

还是复习下startActivity 的调用过程,总得来说,涉及的调用是非常多,不过我们只要清楚各类的角色,问题不大。涉及H,ActivityThread, ApplicationThread , ActivityManagerService(IActivityManager.Stub). ActivityStack等。其中ApplicationThread与ActivityManagerServ...

2018-12-29 14:55:53 1362

原创 LeakCanary 内存泄漏源码分析(一)

LeakCanary是一个内存泄漏检测的框架,简单的搭建就可以帮助程序员发现自己app中内存泄漏情况,并通过界面展示,文件生成的方式,告知程序员泄漏链。题外话:前几篇文章有同学反映老是采用近乎于肢解的方式解析代码,可能一遍下来就作者自己明白了,其他人还是云里雾里。主要现在我没找到好的绘图工具,画各种流程图,类图,交互图,等我这方面能力提升后,补充。现在仍以源码的逐行分析。。。看的痛苦也需要耐心。...

2018-12-21 17:11:49 775

原创 Java Proxy动态代理源码分析

Java Proxy动态代理源码分析

2018-12-20 18:40:31 434 2

原创 Glide--Jsbridge源码分析

Glide项目中有个Jsbridge的包,借着看Glide的机会顺带分析下这个框架。既然要做到交互,肯定是h5和native都有对应的代码去沟通协调,两个都借助各自的一边代理人完成交互,所谓桥的概念。首先我们先看h5代码,就是一个js文件,这个一般是放在assets里预先在webview中加到加载的html中。//notation: js file can only use this kind...

2018-12-18 15:20:56 287 2

原创 java容器类LinkedHashMap源码分析

java容器库内容多,其中性能比较高的属于散列,LinkedHashMap继承于HashMap,在其基础上增加了accessOrder,大量用于LRU算法的缓存实现。下面先贴源码public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{ static...

2018-12-17 16:59:25 180

原创 Glide--LruCache源码分析

LruCache是一个内存缓存工具类,先贴源码public class LruCache<T, Y> { private final LinkedHashMap<T, Y> cache = new LinkedHashMap<>(100, 0.75f, true); private final int initialMaxSize; private...

2018-12-17 13:48:51 1100

原创 Glide--FactoryPools源码分析

Glide 中有池的概念,找到了工厂池这个类,我们着重分析,学习他的编程技巧。public final class FactoryPools { private static final String TAG = "FactoryPools"; private static final int DEFAULT_POOL_SIZE = 20; private static final ...

2018-12-17 11:08:33 253

原创 Glide源码分析

Glide是由Google开发,常用的一个图片加载框架,今天我们来分析一下源码,学习下优秀的框架。本篇文章采用的源码是com.github.bumptech.glide:glide:4.0.0-RC0/** * A singleton to present a simple static interface for building requests with * {@link Reque...

2018-12-17 09:47:48 460

原创 Android源码编译学习问题总结

问题:Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by android-jack-team@google.com)).解决:export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+...

2018-11-16 11:14:59 635

原创 Linux X86-64下编写汇编程序

最近对底层比较感兴趣,重新学习了汇编语言。主要从汇编的角度能够更好的理解程序的运行机制,便于以后对上面封装,抽象出的高级语言有个追本溯源的认识。下面是一个范例程序。写程序之前我们需要先看看对应系统下的系统调用对应的立即数[....]$ head -n20 /usr/include/asm/unistd_64.h...

2018-10-23 09:03:59 1465

原创 关于单例模式

单例模式是设计模式中比较常用的模式,收集了常见的写法1.饿汉public final class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return instan...

2018-10-10 09:42:30 123

原创 动态规划之背包问题

动态规划(DP: Dynamic Programming) 是算法的设计方法之一。我们今天从背包问题出发。背包问题:有n个重量和价值分别为Wi,Vi的物品。从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。输入n = 4(w,v) = {(2,3,(1,2),(3,4),(2,2))}w = 5输出7这是一个著名的问题,先用朴素方法,针对每个物品是否放...

2018-10-09 17:26:09 130

原创 深度优先搜索(DFS)

深度优先搜索(Depth First Search),又称为回溯法。它从某个状态开始,不断的转移状态,直到无法转移。然后回退到前一步的状态,继续转移到其他状态,如此不断重复,得到最终的解。举例:部分和问题给定整数 a1,a2,a3,…,an判断是否可以从中选中若干书,使他们的和恰好为k.输入n = 4;a= {1,2,3,4}k=13输出Yes {13=2+4+7}解决方案:...

2018-10-09 09:46:57 147

原创 Andrid View事件分发机制源码分析

Android 的view树结构大家都清楚,但是事件序列是经过一个怎样的处理路径那。今天就带着疑问来看看源码,去寻找答案。首先我们先看事件如果从Activity开始分发。public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Call...

2018-09-30 12:47:28 200

原创 android okhttp源码分析

okhttp是Square公司开发贡献的,其功能强大,现在是安卓主流网络框架。现在我们就看看这个框架牛逼之处,探究其源码。 compile 'com.squareup.okhttp3:okhttp:3.8.0'我们分析的版本是3.8.0.public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.F...

2018-09-28 15:24:07 599

原创 Android IntentService 源码分析

今天尝试在mac 下做c++开发,先用vim写了一个hello world 预热下,看看开发环境还有问题。果然就出了问题。 gcc hello.cppUndefined symbols for architecture x86_64: "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced fro...

2018-09-27 09:57:58 161

原创 Android startActivity源码分析

闲来无事,打算看看android源码,就从startActivity这个最常见的函数开始一步步分析下去。

2018-09-26 13:22:44 791

原创 Android网络框架初步尝试

最近面试了很多公司,感慨良多,面试官都强调要多写技术文章,多阅读源码。仔细想想确实如此,想成为一名好的Android工程师,如果没有源码阅读,怎么能写出好的代码那。 因为是第一篇文章,肯定想拿出一点好东西带大家分享。想想看自己也就写过一个网络框架可以拿出来谈谈。 首先介绍我这个网络框架的思路 1.所有的网络请求都抽象成一个task. 2.网络请求可以配置执行的方式,比如在当前线程执行,...

2018-07-30 18:56:14 148

空空如也

空空如也

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

TA关注的人

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