返回首页
当前位置: 主页 > 编程语言 > Android教程 >

Android强弱引用教程

时间:2016-10-05 21:30来源:电脑教程学习网 www.etwiki.cn 编辑:admin

Android源码中,大量存在sp/wp。RefBase是Android的native层(C++)上所有对象的祖师爷,位同Java世界的Object。在Android Native体系架构中,利用RefBase的sp(strong pointer)和wp(weak pointer)通过一套强弱引用计数实现对对象生命周期的管理。

2. RefBase

RefBase有一个成员变量mRefs为weakref_impl指针,weakref_impl对象便是用来管理引用计数的。

引用类型 强引用计数 弱引用计数
sp构造 +1 +1
wp构造   +1
sp析构 -1 -1
wp析构   -1
  • 在构造一个实际对象的同时,会自动创建一个weakref_impl对象;
  • 强引用为0时,实际对象被delete;
  • 弱引用为0时,weakref_impl对象被delete;

3. promote

弱引用不能直接操作目标对象,根本原因是在于弱指针类没有重载*和->操作符号,而强指针重载了这两个操作符号。可通过promote()函数,将弱引用提升为强引用对象

  • promote作用试图增加目标对象的强引用计数;
  • 由于目标对象可能已经被delete掉了,或者是其它的原因导致提升失败;

4.生命周期

  • flags为0,强引用计数控制实际对象的生命周期,弱引用计数控制weakref_impl对象的生命周期。
    • 强引用计数为0后,实际对象被delete。所以对于这种情况,应使用wp时要由弱生强。
  • flags为LIFETIME_WEAK,强引用计数为0,弱引用计数不为0时,实际对象不会被delete。
    • 当弱引用计数减为0时,实际对象和weakref_impl对象会同时被delete。
  • flags为LIFETIME_FOREVER,对象不受强弱引用计数的控制,用不会被回收。
顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):Android强弱引用
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐内容