Android 关键类(RefBase,sp, wp)

RefBase:含有内部类weakRef_Impl(影子对象),影子对象中有两个引用计数变量(强引用计数,弱引用计数)

sp,构造的时候,强,弱引用计数均+1,析构的时候都-1

wp,构造的时候,弱引用+1,强引用不变,析构的时候弱引用-1,强引用不变

强引用计数=0:实际对象被delete

弱引用计数=0:影子对象被delete

延长对象生命:

enum {

OBJECT_LIFETIME_WEAK,

OBJECT_LIFETIME_FOREVER

};

OBJECT_LIFETIME_WEAK:强引用=0,弱引用!=0时不会被delete,强弱=0才会被delete

OBJECT_LIFETIME_FOREVER:彻底摆脱强弱引用的控制

轻量级的引用计数:

  LightRefBase

只有强引用计数,

incstrong 时+1

decstrong时-1

强引用计数=0,delete this

  

原文地址:https://www.cnblogs.com/jobs1/p/12059402.html

时间: 2024-10-15 11:27:40

Android 关键类(RefBase,sp, wp)的相关文章

Android指针管理:RefBase,SP,WP (二)

(1)在Android中,RefBase结合了sp和wp,实现了一套通过引用计数的方法来控制对象声明周期的方法. RefBase的定义在/frameworks/base/include/utils/RefBase.h,实现在/frameworks/base/libs/utils/RefBase.cpp.wp的定义在/frameworks/base/include/utils/RefBase.h,sp的定义在/frameworks/base/include/utils/StrongPointer.

Android指针管理:RefBase,SP,WP

Android中通过引用计数来实现智能指针,并且实现有强指针与弱指针.由对象本身来提供引用计数器,但是对象不会去维护引用计数器的值,而是由智能指针来管理. 要达到所有对象都可用引用计数器实现智能指针管理的目标,可以定义一个公共类,提供引用计数的方法,所有对象都去继承这个公共类,这样就可以实现所有对象都可以用引用计数来管理的目标,在Android中,这个公共类就是RefBase,同时还有一个简单版本LightRefBase. RefBase作为公共基类提供了引用计数的方法,但是并不去维护引用计数的

Android智能指针SP WP使用方法介绍

Android手机操作系统既然是开源的操作系统.那么在具体的文件夹中就会存放着各种相关功能的开源代码.我们在使用的时候可以根据这些源代码进行相应的修改就能轻松的完成我们所需的功能.在这里大家就一起来看看Android智能 指针的相关源码解读以及应用方法. 在Android的源代码中,经常会看到形如:sp< xxx>.wp< xxx>这样的类型定义,这其实是Android中的智能指针.智能指针是C++中的一个概念,通过基于引用计数的方法,解决对象的自动释放的问题.在C++编程中,有两

Android关键资源详解

Android层次结构中,资源扮演着重要的角色,资源是绑定到可执行程序的文件(例如音乐文件)或值(例如对话框标题).常用的资源实例包括字符串.颜色.布局文件等.例如不需要将字符串硬编码到应用程序中,可以使用它们的ID,这种间接性使你无需要改变源代码就能够更改字符串资源的文本. Android中主要通过两种文件类型来支持资源:XML文件和原始文件(包括图像.音频和视频).甚至在XML文件内部有时也能看到资源被定义为XML文件内部的值(如字符串),有时XML文件整体就是一个资源(如布局资源). XM

android 工具类之SharePreference

1 /** 2 * SharedPreferences的一个工具类,调用setParam就能保存String, Integer, Boolean, Float, Long类型的参数 3 * 同样调用getParam就能获取到保存在手机里面的数据 4 * @author xiaanming 5 * 6 */ 7 public class SharedPreferencesUtils { 8 /** 9 * 保存在手机里面的文件名 10 */ 11 private static final Stri

Red5源代码分析 - 关键类及其初始化过程

原文地址:http://semi-sleep.javaeye.com/blog/348768 Red5如何响应rmpt的请求,中间涉及哪些关键类? 响应请求的流程如下: 1.Red5在启动时会调用RTMPMinaTransport的start()方法,该方法会开启rmtp的socket监听端口(默认是1935),然后使用mina(apache的io操作类库)的api将RTMPMinaIoHandler绑定到该端口. 2.RTMPMinaIoHandler上定义了messageReceived.m

android 小说类源码制作教程源码下载

自己闲着没事制作了个小说软件用来自己看全本/连载小说, 翻页,字体大小,目录,自动更新 具体效果如下:奉献给大家下载查看... 下载APK效果查看地址: http://yun.baidu.com/s/1gdknYyJ 源码下载地址: http://download.csdn.net/detail/ainibaifenbai/7575817 android 小说类源码制作教程源码下载,布布扣,bubuko.com

Android Activity类讲解(一)

--by CY[[email protected]] 1.protected void onCreate(Bundle savedInstanceState) { throw new RuntimeException("Stub!"); } 当创建一个Activity时,系统会自动调用onCreate方法来完成创建工作.该创建工作包括布局,监听器的绑定等. 首先说一下Bundle 这个类,Bundle是一个键值对,跟Map类似,两个Activity之间的通信可以用Bundle类来实现.

android异步类AsyncTask的简单使用

Android为了降低这个开发难度,提供了AsyncTask.AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务,更通俗地说就是一个执行后台任务的线程 而且他还会自动通知主线程更新UI 优点: 结构清晰,容易理解. 缺点 代码量稍大 下面直接看代码 1 private class AsyncLogin extends AsyncTask<Void,Integer,Boolean>{ 2 private EditText passwordEdit; 3 private EditT