1RefBase、sp和wp是什么?

RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象。在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对象生命周期的机制。就如我们想像的那样,这三者的关系非常暧昧。初次接触Android源码的人往往会被那个随处可见的sp和wp搞晕了头。

什么是sp和wp呢?其实,sp并不是我开始所想的smart pointer(C++语言中有这个东西),它真实的意思应该是strong pointer,而wp是weak pointer的意思。我认为,Android推出这一套机制可能是模仿Java,因为Java世界中有所谓weak reference之类的东西。sp和wp的目的,就是为了帮助健忘的程序员回收new出来的内存

我还是喜欢赤裸裸地管理内存的分配和释放。不过,目前sp和wp的使用已经深入到Android系统的各个角落,想把它去掉真是不太可能了。

2Looper和Handler类分析

工作原理:

(1)有一个消息队列,可以往这个消息队列中投递消息

(2)有一个消息循环,不断从消息队列中取出消息,然后处理

3线程和消息处理原理

(1)事件源把待处理的消息加入到消息队列,一般是加至队列尾,一些优先级高的消息也可以加至队列头。事件源提交的消息可以是按键、触摸屏等物理事件产生的消息,也可以是来自系统或应用程序本身发出的请求消息。

(2)处理线程不断从消息队列头中取出消息并处理,事件源可以把优先级高的消息放到队列头,这样,优先级高的消息就会首先被处理。

4Looper和Handler的功能是什么?

(1)Looper类,用于封装消息循环,并且有一个消息队列。

(2)Handler类,有点像辅助类,它封装了消息投递,消息处理等接口。

5Looper的作用

(1)Looper封装了一个消息队列。

(2)Looper的prepare函数把这个Looper和调用prepare的线程(也就是最终的处理线程)绑定在一起了。

(3)处理线程调用loop函数,处理来自该消息队列的消息。

6Looper、Message和Handler的关系

(1)Looper中有一个Message队列,里边存储的是一个个待处理的Message

(2)Message中有一个Handler,这个Handler是用来处理Message的

7怎么往Looper的消息队列插入消息?

(1)调用Looper的myQueue,它将返回消息队列对象MessageQueue。

(2)构造一个Message,填充它的成员,尤其是target变量。

(3)调用MessageQueue的enqueueMessage,将消息插入消息队列。

8Handler是如何通过dispatchMessage来处理消息的呢?

(1)Message如果自带了callback处理,则交给callback处理。

(2)Handler如果设置了全局的mCallback,则交给mCallback处理。

(3)如果上述都没有,该消息则会被交给Handler子类实现的handleMessage来处理。当然,这需要从Handler派生并重载handleMessage函数。

results matching ""

    No results matching ""