android (4)
来源:互联网 发布:e52软件下载 编辑:程序博客网 时间:2024/06/06 13:24
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)
- 【Android】【笔记】《Android 入门经典》part 4 Android布局管理
- [Android面试题-4] Android内存优化
- 《android 4高级编程》--android简介
- android学习笔记(4)---android框架
- Android学习4:Android的Activity小记
- Android 基础学-4 Android系统提供
- NoClassDefFoundError with Android Studio on Android 4
- Android(4)---Android 控件布局常用属性
- 【Android笔记-4】ListView Android:divider
- Android UI 优化4
- android学习小结4
- Android培训班(4)
- Android学习笔记4
- Android HAL 开发 (4)
- android 笔记4
- android 笔记4
- ubuntu10.4编译Android
- android system.img的解包和打包
- 一个程序员的10年工作总结
- msg2033触摸屏驱动可模拟KEY_HOME KEY_BACK KEY_MENU
- SAP定义应收应付容差组
- 装饰模式的应用
- android (4)
- 初解SSH
- 黑马学习---------------反射(构造函数)
- 黑马学习-------------------枚举
- SHSetValue 最后一个参数字节数是否要加上\0验证
- 现要拆分以下字符串到一个表:so1101111/2/32/a1/4a2/5/63/b832/8/39
- dd命令使用
- 黑马学习-------------反射(获取类的三种方式)
- Oracle 查询优化基本准则