android (4)
android (4)
2011-7-15 20:16:42
refs_by_node 这个节点就是 node_ref 组成的红黑树
节点的值就是 binder_node 的地址组成
前一节所说
if (target == 0 && binder_context_mgr_node &&
(cmd == BC_INCREFS || cmd == BC_ACQUIRE)) {
ref = binder_get_ref_for_node(proc,
binder_context_mgr_node);
if (ref->desc != target) {
binder_user_error("binder: %d:"
"%d tried to acquire "
"reference to desc 0, "
"got %d instead\n",
proc->pid, thread->pid,
ref->desc);
}
} else
ref = binder_get_ref(proc, target);
if (ref == NULL) {
binder_user_error("binder: %d:%d refcou"
"nt change on invalid ref %d\n",
proc->pid, thread->pid, target);
break;
}
解析了命令 解析了目标
如果满足了target 为0,且有binder_node 存在
命令为增加引用或查询
则调用 binder_get_ref_for_node 找出 binder_context_mgr_node 的引用关系
binder_node 都在这呢 refs_by_node
binder_ref 的排序规则就是按binder_node的地址来的
找到了就返回
如果找不到对应的改怎么办?
说明作为参数传入的binder_node 没有加入到这个ref 链表中
那么就需要创建一个binder_ref结构
插入到2棵红黑树中,一个以binder_node 的地址排序
一个以desc 排序
那么也就是说除了通过node来查找引用外 还可以使用描述来查找引用
最终这个binder_ref还需要插入到node的ref链表中
如果引用的描述和目标不符合,还是会报错
如果命令是 BC_INCREFS
通过binder_inc_node 增加了ref结构和node的弱引用
如果是 BC_ACQUIRE
就增加强引用
BC_RELEASE
就是降低强引用
BC_DECREFS
就是减少弱引用
如果命令是 BC_INCREFS_DONE 或 BC_ACQUIRE_DONE
binder_node 指针是从用户层传入的,同时传入的还有cookie
通过指针找到这个binder_node之后还需要通过cookie进行验证
再验证 pending 状态
binder_node 有这样一个字段 struct binder_work {
struct list_head entry;
enum {
BINDER_WORK_TRANSACTION = 1,
BINDER_WORK_TRANSACTION_COMPLETE,
BINDER_WORK_NODE,
BINDER_WORK_DEAD_BINDER,
BINDER_WORK_DEAD_BINDER_AND_CLEAR,
BINDER_WORK_CLEAR_DEATH_NOTIFICATION,
} type;
};
binder_dec_node 减少引用
android (4)相关推荐
- Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程
首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...
- Android 的NDK的Makefile编写
Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...
- Android Animation (安卓动画)概念简介
Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...
- 基于Android和SpringBoot的购物App
(Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...
- Android数据持久化:SharePreference
SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...
- Android数据持久化:文件存储
数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...
- Android Studio中RecycerView依赖库加载问题
依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...
- Android布局优化之include、merge、ViewStub
include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...
- Android动画之帧动画和补间动画
Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...
- Android系统的启动过程
Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...
最新文章
- Science:人类在实验室创建了微型“大脑”,含祖先基因的那种
- XPsp3键盘设备链/栈信息_02_VMware
- form表单提交不刷新页面的方法
- Session,Cookie,jsessionid,Url重写
- 人脉社群系统源码人脉推广裂变源码群发布源码
- android 底部tab效果,Android 仿微信底部渐变Tab效果
- 坚持的力量 第十一篇
- npm发布vue组件
- 智慧零售erp通用版管理系统+门店管理+商品管理+厂商管理+财务管理+销售管理+仓储管理+Axure高保真交互ERP通用版零售行业web端简易版管理系统
- 最全的常用正则表达式大全
- thread和threadLocal之间的关系
- 设计模式网站 http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html
- jsdroid 教程_教程24富怡服装cad软件V8安装包送操作说明书自学180部视频教程制版排料放码工具操作教学打赏49.8大洋...
- 电子工程师私藏的一个网站
- 软件工程 软件设计说明书模板
- 电力巡检解决方案解决方案
- creo绘图属性模板_creo绘图属性
- 3D游戏建模:女性角色制作
- 简单教你修改视频尺寸
- 拉结尔派遣任务辅助介绍 拉结尔快速升级脚本挂机工具