Decorative image frame

View的绘制流程

View 的绘制流程是 Android 开发的必备知识点之一

API:26

View 树

因为这不是重点,所以介绍得比较简单,下次写文章详细讲解View树的形成与关系。

一个 Activity 会形成一棵以 ViewRoot 为根节点的 View 树
View树.png
ViewRoot 的实现类就是 ViewRootImlp,这棵树形成流程为:

  • Activity onCreate setContentView() 的时候解析后形成以 DecorView 为根节点的 View 树
  • Activity 启动的最后在 WindowManagerGlobal 生成 ViewRootImpl 并将之与DecorView绑定在一起 Read More...

View 的事件分发拦截机制

这一个知识点也是写烂了的,可是作为 Android 开发者又不得不学习这部分,学习了呢,总觉得要写点东西出来才觉得有感觉,得,就有这一篇文章了。

API 27

流程介绍

在单点触摸中,我们对屏幕的点击,滑动,抬起等一系的动作都是由一个一个MotionEvent对象组成的触摸事件。MotionEvent 是对一个对一个事件的封装,里面包括动作、坐标等等信息,根据不同动作,主要有以下三种事件类型:

  1. ACTION_DOWN:手指刚接触屏幕,按下去的那一瞬间产生该事件
  2. ACTION_MOVE:手指在屏幕上移动时候产生该事件
  3. ACTION_UP:手指从屏幕上松开的瞬间产生该事件

要要注意触摸事件不是独立的,而是成组的,每一组事件都是由按下事件开始的,由抬起事件或者取消事件结束。我们把由 ACTION_DOWN 开始(按下),ACTION_UP (抬起)或者 ACTION_CANCEL(取消) 结束的一组事件称为事件序列或者说事件流。取消事件是一种特殊的事件,它对应的是事件序列非人为的提前结束。
Read More...

Android的消息机制-Handler

为了更好的理解 Looper 的工作原理,我们需要对 ThreadLocal 进行了解,如果对 ThreadLocal 没有了解的童鞋,可以参看 ThreadLocal 原理

概述

一句话原理:共享内存

Handler 作为日常开发的必备,不可避免就要涉及这方面的知识。从开发者角度来说,Handler 是 Android 消息机制的上层接口,使得开发的时只需与 Handler 交互即可。Handler 使用也很简单,能够轻松将一个任务切换到 Handler 所在的线程中执行

很多人认为Handler的作用就是更新UI,的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景。具体来说,就是有时候需要在子线程做一些耗时操作,比如说访问网络或者耗时的I/O操作,当这些耗时操作完成时,程序的UI进行相应的改变。由于安卓开发规范的限制,我们不能在子线程中访问UI控件,因为UI的控件是线程非安全的,这个时候通过Handler就可以将更新UI的操作切换到主线程中执行。
Read More...

ThreadLocal 原理

总述

ThreadLocal 在面试中经常提到,关于ThreadLocal使用不当造成OOM以及在特殊场景下,通过ThreadLocal可以轻松实现一些看起来复杂的功能,都说明值得花时间研究其原理。

ThreadLocal 不是 Thread,是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,对数据存储后,只有在线程中才可以获取到存储的数据,对于其他线程来说是无法获取到数据。可能这才是Local的真正含义吧。
Read More...