Piasy

NEVER STOP

安卓基础:View 绘制

View 树的绘图流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 framework 处理。 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下:...

Java 基础:动态代理、多态原理

RESTful API 调用很多人都在用 Retrofit,说到 Retrofit 就不得不提动态代理,虽然这不是它唯一的亮点,而且也不是动态代理的典型使用场景,但大家就是爱问:说说动态代理是怎么回事吧?Retrofit 的解析请见 拆轮子系列:拆 Retrofit。 动态代理的原理 看过源码之后其实很简单,就是一句话:运行时生成实现类(代理类)的字节码,对其所有的方法调用都转发到 in...

安卓基础:task, launchMode, Intent flag

Task 是一个从用户角度出发的概念,是一些 Activity 的组合,它们组合起来是为了让用户完成某一件工作(或者说操作)。Task 在 framework 中对应的类是 com.android.server.am.TaskRecord,它用一个列表记录着其中的所有 Activity,至于到底是怎么记录的,就要看源码了。 Task 内的 Activity 以栈的形式组织起来,这个 栈 也...

安卓基础:Activity/Fragment 销毁与重建

Activity 的销毁与重建有两种情况:App 处在后台,由于内存紧张而被杀死,当用户回到 我们的 App 时,被杀掉的 Activity 会被重新创建;当手机配置发生变化时,例如旋转屏幕方向,Activity 会被重新创建。 当 Activity 被销毁时,在第一种情况中,它加载的 Fragment 显然也要被销毁,因为此时通常整个 App 都被杀死了,但第二种情况中,我们可以通过设置...

安卓基础:Activity/Fragment 生命周期

看图 developer 官方图: GitHub 神图: 回答问题 以下过程均是针对 AppCompatActivity 和 support Fragment,测试代码可以在 GitHub 获取。 单个 Activity + Fragment 的启动? Activity onCreate Fragment onAttach Fragment onCreate Frag...

Java 基础:ThreadLocal,HashMap

这一篇可以看做是 Handler 的番外篇。 ThreadLocal 看 Looper 源码的过程中,我们肯定看到过 Looper.myLooper() 的使用,它可以获取与当前线程关联的 Looper 对象,那这个关联是怎么建立起来的?就是通过 ThreadLocal。 我们可能会把 ThreadLocal 对象理解为一个 Map,它的 set 和 get 方法都有一个“隐形的” k...

安卓基础:Handler

大家好,博客断更将近三个月之后,终于可以恢复了。近期将要带来的,是一系列安卓系统的基础知识。这些内容其实也算是我对自己知识的一次整理,虽然日常开发工作可能用得不多,但这些基本的东西还是应该扎实地掌握,毕竟如果要参加面试,免不了要回答这些问题的 :) 水平有限,难免有失偏颇,欢迎大家指正! 今天先讲讲 Handler,如果被问到“讲讲你说 Handler 的理解”,怎么把这么一大串内容讲清...

YetAnotherDream

2016 年终于过去,可以松口气,捋一捋过去的 376 天了。 新年农历初五,翻译了第一篇 NimbleDroid 的博客,不算什么了不起的大事,但自己增长见识的同时,也能给别人一点帮助,就挺好。后来一直坚持翻译他们的每一篇博客,虽然最后有几篇没时间翻译,但今天拜访了他们的创始人,贵系俊峰师兄,自己一点微不足道的工作得到了认可,我很高兴。 从年初开始逐步总结在 YOLO 所做的事情,音频...

RxJava 复杂场景(二):调度

RxJava 最大的两个特点:事件流操作,异步。 组合利用各种操作符,我们可以实现复杂的事件流处理需求,例如前文中提到的缓存:根据一组 id,先从本地查询,本地缺失的部分再从服务器获取,再把两者合并起来返回,最后服务器获取的部分还要保存到本地。 而利用 subscribeOn 和 observeOn 这两个操作符,我们可以轻松地实现代码执行的异步调度。 但当我们的需求变得越来越复杂时,...

这个国庆假期我做了些什么?

今年国庆假期,我依然没有出去。那我在家做了些什么? 大抵就是三件事:给家里的宝宝做了一顿丰盛的排骨;一口气翻译了六篇 Advanced RxJava 博客,完成了六周的量,目前这个系列还有 18 篇文章,预计 5 个月之后就能翻译完;花了 50 个小时,验证了 AndroidTDDBootStrap 在开启安卓新项目时的强大优势,怎么验证的?花了 50 个小时,就开发出了一个复杂的信息中心...