Piasy

NEVER STOP

安卓基础:App 各大组件

Activity Activity 是和用户交互的入口,几乎用户所有的交互操作都发生在 Activity 中,只有一个例外:通知栏,notification area (bar) 和 notification drawer 都由系统控制(SystemUI,一系列有界面的 Service,除了状态栏,还包括虚拟按键、最近任务、壁纸等,更多内容可以阅读《深入理解Android 卷III》)。桌...

安卓基础:事件传递及滑动冲突的处理

基本概念 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多点触控)等; 事件有很多类型,ACTION_DOWN,ACTION_UP,ACTION_MOVE 等; 对事件的处理包括三类:传递,dispatchTouchEvent();拦截,onInterceptTouchEvent();消费,onTou...

安卓基础: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 所做的事情,音频...