解读 JUC —— AQS 独占模式 发表于 2019-05-07 1. 前言说起 JUC,我们常常会想起其中的线程池(ExecutorService)。然而,我们今天来看看另一个核心模块 AQS。 AQS 是 AbstractQueuedSynchronizer 的简称,在 JUC 中作为各种同步器的基石。举个例子,常见的 ReentrantLock 就是由它实现 ... 阅读全文 »
如何阅读AOSP的native代码 发表于 2019-04-09 1. 前言先上个效果图,从 MessageQueue.nativePollOnce 一直跟到 Looper.cpp 中的 epoll_wait,非常的丝滑。 2. 一些尝试 猜猜看是什么IDE? 记得AS导入aosp的java代码是很方便的,有个idegen帮你搞定。 但是AS对c++的支持稍微 ... 阅读全文 »
可代替 ASM,使用 AnnotationProcessor 做代码插桩 发表于 2019-02-14 1. 前言说到代码插桩,你可能会想到 AspectJ、Transfrom Api + ASM 等等。 代码插桩的用处自不必说,可以做埋点、热修复、组件化路由等等。 然而,AspectJ感觉不好用,ASM 比较复杂,需要自定义 gradle 插件。好在前段时间,我遇到了新的方法 —— Annotati ... 阅读全文 »
LeakCanary 源码分析 发表于 2018-11-27 1. 前言LeakCanary 是由 Square 开发的一款内存泄露检测工具。相比与用 IDE dump memory 的繁琐,它以轻便的日志被广大开发者所喜爱。让我们看看它是如何实现的吧。 ps: Square 以著名框架 Okhttp 被广大开发者所熟知。 2. 源码分析2.1 设计架构分 ... 阅读全文 »
也谈泛型,从 Java 到 Kotlin「Java篇」 发表于 2018-05-10 1. 前言私以为,泛型是 Java 语法中最难理解的一个特性。其一,它的某些特性比较反直觉。其二,Java 中的泛型是阉割版的。Java 只给出了 What,想要理解 Why,还要从 JVM 的其他语言中寻找答案。 本文会就Raw类型、类型擦除、通配符、kotlin独有的特性等话题展开探讨。 2. ... 阅读全文 »
Android 知识体系脑图「android篇」 发表于 2018-04-24 1. 前言 前后历时一个半月,也算是拿到了心仪的 offer,顺便水一篇总结把。 前后经历了菜鸟网络、有赞、手淘、头条、全民直播、喜马拉雅,面的多是 1~3 年的岗位。除了手淘和头条一面被刷 QAQ,其他的都走完了流程,然而拿到 offer 的只有最后两个。对比之下,选择了喜马拉雅。 马云说,员工 ... 阅读全文 »
Android 知识体系脑图「java篇」 发表于 2018-03-26 1. 前言 最近准备跳槽一波,试了一下水,现在要求越来越高,基础不行根本活不过两集,连boss的面都见不到。 边面试边总结,回来恶补基础,花了些时间整理了下知识体系。自己看书也怕理解有误,希望大佬留言交流指正与补充。 这篇文章主要还是脑图的形式,不会展开细节,当做是划重点把。 像 HashMap, ... 阅读全文 »
插件化理解与实现 —— 加载 Activity「类加载篇」 发表于 2018-01-24 1 前言插件化算是比较复杂的一个话题。刚一接触的时候,我是一脸懵逼的,网上看了很多博客,一直是似懂非懂,不得其要领。期间也尝试看了Small,也是知其然不知其所以然。 就此搁置一段时间,直到真正拿出勇气,尝试自己实现插件化,成功加载了四大组件之一Activity。这才明白它的背后究竟做了什么,以及为 ... 阅读全文 »
从源码看6.0权限 —— 跟踪 Activity.requestPermissions() 发表于 2017-12-25 1 写在前面话说 6.0 出来已经挺久了,对于权限适配我们也有很多轮子可用。关于如何适配 6.0 权限,网上资料很多也很完善,故并不会展开探讨。 不用第三方框架的话,我们会和这些 api 打交道 (方法太长省略参数): Context.checkSelfPermission() Activity. ... 阅读全文 »
优秀的程序员是不看源码的 发表于 2017-12-25 向知乎神文致敬:优秀的女孩是没有性生活的 前几天我和一位程序员朋友唠嗑,连续交流了几个框架 api 他都不知所云。 尴尬之余,我问他:「你没有什么理想吗?你现在最渴望的事情是什么?」 他不假思索的说道:「看框架源码!」 真没想到,在工作之外居然还有这种操作。 我问为什么这能成为你现在最渴望的事情 ... 阅读全文 »