再谈Android源码的C++智能指针

AOSP里面用到智能指针的地方太多,目前也有很多现成源码分析的文章,本文从引用的角度谈谈我对其的理解,尽量避免贴大量源代码,水平有限,可能有纰漏,也感谢帮忙指出。

Java与C++对象的生命周期

我们都知道,Java对象通过new关键字创建,之后就会再Java虚拟机的堆区创建一块内存区域,然后我们通过的类型变量去引用它,这个就是强引用。垃圾回收器(GC)会在适当的时刻,根据对象可达性(reachable)判断,是否回收相关的对象。

另外,当我们在长存对象里面引用对象的时,例如在Android的Activity内部使用Handler对象给主线程发消息,如果不使用静态的Hanlder对象的话,会导致对象持有外部的Activity对象,而消息Message对象会引用Handler对象,如果消息队列里面的对象一直没有得到处理,那么就会导致Activity对象得不到回收,所以我们就需要将Handler改为非内部类的实现方式,并且不能对Activity强引用。这个时候就需要对Activity弱引用, 不影响GC对Activity对象进行回收。

Java除了强引用,还有另外三种引用:

对对象的引用从强到弱。

….