Android系统中强指针是如何实现的
发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,本篇内容主要讲解"Android系统中强指针是如何实现的",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android系统中强指针是如何实现的"吧!强指针和
千家信息网最后更新 2024年10月18日Android系统中强指针是如何实现的
本篇内容主要讲解"Android系统中强指针是如何实现的",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android系统中强指针是如何实现的"吧!
强指针和弱指针基础
android中的智能指针包括:轻量级指针、强指针、弱指针。
强指针:它主要是通过强引用计数来进行维护对象的生命周期。
弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期。
如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和弱指针是通过RefBase这个类来提供实现的引用计数器。
强指针和弱指针关系相对于轻量级指针来说更加亲密,因此他们一般是相互配合使用的。
强指针原理分析
以下针对源码的分析都是来源于android5.0系统源码
强指针的定义实现主要在\frameworks\rs\cpp\util\RefBase.h文件中
class RefBase{public: //定义了成员变量用于维护强引用对象的引用计数 void incStrong(const void* id) const; //定义了成员变量用于维护强引用对象的引用计数 void decStrong(const void* id) const; void forceIncStrong(const void* id) const; //获取强指针计数的数量. int32_t getStrongCount() const; //这个类主要实现计数器的 class weakref_type { public: RefBase* refBase() const; void incWeak(const void* id); void decWeak(const void* id); // acquires a strong reference if there is already one. bool attemptIncStrong(const void* id); // acquires a weak reference if there is already one. // This is not always safe. see ProcessState.cpp and BpBinder.cpp // for proper use. bool attemptIncWeak(const void* id); //! DEBUGGING ONLY: Get current weak ref count. int32_t getWeakCount() const; //! DEBUGGING ONLY: Print references held on object. void printRefs() const; //! DEBUGGING ONLY: Enable tracking for this object. // enable -- enable/disable tracking // retain -- when tracking is enable, if true, then we save a stack trace // for each reference and dereference; when retain == false, we // match up references and dereferences and keep only the // outstanding ones. void trackMe(bool enable, bool retain); }; weakref_type* createWeak(const void* id) const; weakref_type* getWeakRefs() const; //! DEBUGGING ONLY: Print references held on object. inline void printRefs() const { getWeakRefs()->printRefs(); } //! DEBUGGING ONLY: Enable tracking of object. inline void trackMe(bool enable, bool retain) { getWeakRefs()->trackMe(enable, retain); } typedef RefBase basetype;protected: RefBase(); virtual ~RefBase(); //! Flags for extendObjectLifetime() enum { OBJECT_LIFETIME_STRONG = 0x0000, OBJECT_LIFETIME_WEAK = 0x0001, OBJECT_LIFETIME_MASK = 0x0001 }; void extendObjectLifetime(int32_t mode); //! Flags for onIncStrongAttempted() enum { FIRST_INC_STRONG = 0x0001 }; virtual void onFirstRef(); virtual void onLastStrongRef(const void* id); virtual bool onIncStrongAttempted(uint32_t flags, const void* id); virtual void onLastWeakRef(const void* id);private: friend class ReferenceMover; static void moveReferences(void* d, void const* s, size_t n, const ReferenceConverterBase& caster);private: friend class weakref_type; //通过类对象来获取计数器数据。 class weakref_impl; RefBase(const RefBase& o); RefBase& operator=(const RefBase& o); weakref_impl* const mRefs;};
通过以上类定义可以看到 RefBase类里面嵌套着weakref_type类,这个weakref_type类也的对象mRefs来描述对象的引用计数。也就是说每一个RefBase对象都包含一个weakref_type对象。
virtual表示的是虚函数,friend表示友元函数,
到此,相信大家对"Android系统中强指针是如何实现的"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
指针
对象
系统
中强
计数器
内容
函数
变量
周期
成员
源码
生命
轻量
轻量级
数来
分析
学习
亲密
实用
更深
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
英国开设网络安全硕士学位
四川项目软件开发哪家专业
什么叫做服务器以及作用
网络安全的三不
华为有网络技术
java监听服务器
我的世界服务器极限模式怎么设置
运城网络技术怎么样
华科网络安全研究院咋样
三星手机数据库坏了怎么办
租网络服务器
qq文件服务器拒绝
韶关网络安全技术支撑
计算机网络技术资格认证
药智网医疗器械数据库
软件开发平台服务
应用技术与网络技术区别
通州区管理网络技术服务怎么样
高斯view怎么连接服务器
境外服务器邮箱怎么登录
网络安全工程师一般去哪些城市
软件开发社团缩写
可转入的服务器
无法与数据库建立可靠
网络安全创新做法
马鞍山hpe机架式服务器报价
网络安全的作文英语作文
服务器高级教程
周家桥街道服务器电脑回收上门
云服务器7大安全秘密