在浅谈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” 博客,谢绝转载!

更多相关文章

  1. listview更改选中时item背景色
  2. android中sqlite操作
  3. Android(安卓)-- Service的开启关闭与生命周期
  4. android客户端使用网络数据压缩
  5. Android(安卓)项目规范
  6. android其实很简单--内存相关
  7. 一种极低成本的Android屏幕适配方式
  8. android recycleView局部刷新的选择
  9. Android(安卓)防止手机休眠

随机推荐

  1. 演示flex的3个属性
  2. js 中使用for或者forEach遍历数组
  3. 仿jd手机端
  4. grid仿PHP中文网首页
  5. JS的引入方式
  6. 懒加载及轮播图
  7. JQuery 常用方法
  8. 定位原理、模态框以及三列布局
  9. 作业_0706
  10. 前端作业-07-09