浅谈Android引用计数(2)
16lz
2021-01-24
在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用。
下面是RefBase和相关类的类图:
图中可以看出,RefBase类有一个成员变量 mRefs,它指向一个weakref_impl对象。这个对象管理这RefBase的生命周期,其中weakref_impl类中有两个引用计数:一个表示强引用的个数,一个表示弱引用的个数。
RefBase的生命周期控制方式有两种:
1.受强引用控制:即weakref_impl类中的mFlag的值为OBJECT_LIFETIME_STRONG;
2.受弱引用控制:即weakref_impl类中的mFlag的值为OBJECT_LIFETIME_WEAK;
当生命周期控制方式为1的时候,weakref_impl中的强引用计数为0的时候就会销毁RefBase对象,但是不会销毁weakref_impl对象。
当生命周期控制方式为2的时候,只有当强弱引用都为0的时候,才会销毁RefBase,同时也会销毁weakref_impl。
要想自己定义的类也能实现引用计数的管理,就要继承RefBase。RefBase默认的生命周期控制方式是受强引用控制。在使用wp中的保存的m_ptr指针的时候一定要检查指针是否有效,要调用promote()函数,检查返回的sp是否为空,如果为空表示RefBase已经被销毁。
本文出自 “HelloWord” 博客,谢绝转载!
更多相关文章
- listview更改选中时item背景色
- android中sqlite操作
- Android(安卓)-- Service的开启关闭与生命周期
- android客户端使用网络数据压缩
- Android(安卓)项目规范
- android其实很简单--内存相关
- 一种极低成本的Android屏幕适配方式
- android recycleView局部刷新的选择
- Android(安卓)防止手机休眠