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)相关推荐

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程

    首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...

  2. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

  3. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  4. 基于Android和SpringBoot的购物App

    (Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...

  5. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

  6. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  7. Android Studio中RecycerView依赖库加载问题

    依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...

  8. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  9. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

  10. Android系统的启动过程

    Android系统的启动过程可以简单地总结为以下几个流程: 加载BootLoader -> 初始化内核 -> 启动init进程 -> init进程fork出Zygote(孵化器)进程 ...

最新文章

  1. Science:人类在实验室创建了微型“大脑”,含祖先基因的那种
  2. XPsp3键盘设备链/栈信息_02_VMware
  3. form表单提交不刷新页面的方法
  4. Session,Cookie,jsessionid,Url重写
  5. 人脉社群系统源码人脉推广裂变源码群发布源码
  6. android 底部tab效果,Android 仿微信底部渐变Tab效果
  7. 坚持的力量 第十一篇
  8. npm发布vue组件
  9. 智慧零售erp通用版管理系统+门店管理+商品管理+厂商管理+财务管理+销售管理+仓储管理+Axure高保真交互ERP通用版零售行业web端简易版管理系统
  10. 最全的常用正则表达式大全
  11. thread和threadLocal之间的关系
  12. 设计模式网站 http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html
  13. jsdroid 教程_教程24富怡服装cad软件V8安装包送操作说明书自学180部视频教程制版排料放码工具操作教学打赏49.8大洋...
  14. 电子工程师私藏的一个网站
  15. 软件工程 软件设计说明书模板
  16. 电力巡检解决方案解决方案
  17. creo绘图属性模板_creo绘图属性
  18. 3D游戏建模:女性角色制作
  19. 简单教你修改视频尺寸
  20. 拉结尔派遣任务辅助介绍 拉结尔快速升级脚本挂机工具

热门文章

  1. 段码屏使用前要不要撕掉保护膜?
  2. Neo4j 使用场景
  3. Enterprise Architect安装教程
  4. excel 调用barTender打印条码 VBA 调用BarTender打印标签BarTender二次开发 VBA 条码打印 VBA二维码打印 Excel条码打印 Excel二维码打印
  5. 金山-西山居2011实习生招聘笔试题目
  6. python学习笔记之-melt和pivot函数
  7. mysql查看当前表字符集_查看mysql字符集及修改表字符集
  8. linux递归修改文件权限
  9. 【matlab图像处理】图像处理的逻辑运算
  10. swiper中自定义分页器内容