android之RefBase】的更多相关文章

路径 system core libutils include utils RefBase.h namespace android 命名空间是android class TextOutput;// 这是前置声明(Forward declaration),前置声明只能作为指针或引用,不能定义类的对象,自然也就不能调用对象中的方法了. TextOutput& printWeakPointer(TextOutput& to, const void* val); 函数声明,返回值是引用,参数也是引…
简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对象生命周期的机制.RefBase的子类在构造一个实际对象的同时,还会悄悄地构造一个影子对象. sp是strong pointer, wp是weak pointer, LightRefBase是轻量级的引用计数类,只有一个引用计数,为0就删除. RefBase,sp,wp中的引用计数 · RefBas…
有人说声明 Private Destructor, 这对象只能在 stack 上创建,不能在Heap上创建, 其实错了, 这样的程序编译都过不了. 那为何会有 Private Destructor, 因为程序是这样写的 ------------------------------------ class Base { public:     Base(); protected:     virtual ~Base();     friend class Base_Friend; }; -----…
在Android的源代码中,经常会看到形如:sp<xxx>.wp<xxx>这样的类型定义,这其实是Android中的智能 指针.智能指针是C++中的一个概念,通过基于引用计数的方法,解决对象的自动释放的问题.在C++编程中,有两个很让人头痛的问题:一是忘记释放动态申 请的对象从而造成内存泄露:二是对象在一个地方释放后,又在别的地方被使用,从而引起内存访问错误.程序员往往需要花费很大精力进行精心设计,以避免这些 问题的出现.在使用智能指针后,动态申请的内存将会被自动释放(有点类似Ja…
(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中通过引用计数来实现智能指针,并且实现有强指针与弱指针.由对象本身来提供引用计数器,但是对象不会去维护引用计数器的值,而是由智能指针来管理. 要达到所有对象都可用引用计数器实现智能指针管理的目标,可以定义一个公共类,提供引用计数的方法,所有对象都去继承这个公共类,这样就可以实现所有对象都可以用引用计数来管理的目标,在Android中,这个公共类就是RefBase,同时还有一个简单版本LightRefBase. RefBase作为公共基类提供了引用计数的方法,但是并不去维护引用计数的…
首先RefBase在android的c++部分是作为一个所有类的基类,其作用跟Java中的Object类似 这个类中存在一个私有成员: weakref_impl* const mRefs;(weakref_impl是weakref_type的子类) 这个mRefs是“影子对象”,是管理一个对象的引用计数的关键 RefBase的构造中mRefs(new weakref_impl(this)),new一个weakref_impl对象,weakref_impl的构造形参是RefBase的指针 同时会初…
Android多线程分析之四:MessageQueue的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前面两篇文章<Android多线程分析之二:Thread的实现>,<Android多线程分析之三:Handler,Looper的实现>中分别介绍了 Thread 的创建,运行,销毁的过程以及 Thread与 Handler,Looper 之间的关联:Thread 在其 run() 方法中创建和运行消息处理循环 Loo…
Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明. Framework:Camera.java Android Runtime:android_hardware_Camera.cpp Library:Camera Client和Camera Service HAL:CameraHardwareInterface 一.Framework:Camera.java Camera是应用层软件直接使用的类,涵盖了启动.预览.拍摄及关闭等操作摄像头的全…
研究Android的时候,经常会遇到sp.wp的东西,网上一搜,原来是android封装了c++中对象回收机制.说明:1. 如果一个类想使用智能指针,那么必须满足下面两个条件:    a. 该类是虚基类RefBase的子类或间接子类    b. 该类必须定义虚构造函数.如virtual ~MyClass();   2. 本文以类BBinder来进行说明,其余类使用sp或wp的情况类似3. 代码路径:frameworks/base/libs/utils/RefBase.cpp       fram…