红茶一杯话Binder (传输机制篇_下) 侯 亮 1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头.另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向binder驱动发出BC_REPLY语义.当BC_语义经由binder驱…
红茶一杯话Binder (传输机制篇_中) 侯 亮 1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动.然而在驱动层,这部分数据又是如何传递到BBinder一侧的呢?这里面到底藏着什么猫腻?另外,上一篇文章虽然阐述了4棵红黑树,但是并未说明红黑树的节点到底是怎么产生的.现在,我们试着回答这些问题. 1.1 概述 在Binder驱动层,和ioctl()相对的动作是binder_ioctl()函数.在这个函数里,会先调用类似copy_from_user…
红茶一杯话Binder (传输机制篇_上) 侯 亮 1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码.在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击.其实,在binder驱动层,还有个与之相对的结构,叫做binder_proc.为了说明问题,我修改了初始篇中的示意图…
1.先说一个大概 Android平台的一个基本设计理念是构造一个相对平坦的功能集合,这些功能可能会身处于不同的进程中,然而却可以高效地整合到一起,实现不同的用户需求.这就必须打破过去各个孤立App所形成的天然藩篱.为此,Android提供了Binder机制. 在Android中,系统提供的服务被包装成一个个系统级service,这些service往往会在设备启动之时添加进Android系统.在上一篇文档中,我们已经了解了BpBinder和BBinder的概念,而service实体的底层说到底就是…
1 什么是Binder? 简单地说,Binder是Android平 台上的一种跨进程交互技术.该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用.后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责Android平台的开发工作,所以把这项技术也带进了Android. 我们知道,在Android的应用层次上,基本上已经没有过去的进程概念了.然而在实现层次,它毕竟还是要建构在一个个进程之上的.…
欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 一个Binder实例 我们Binder的学习将从以下的一个实例開始.依据Android文档中的描写叙述,创建一个Binder服务主要包含例如以下3步: 以下详细看一下在eclipse中是怎样开发一个Binder应用的. 第一步:在project文件夹下定义aidl文件. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.zxh.ipc;   import com.zxh…
Android中Binder学习(初始篇) 本篇博客学习自侯亮的博客.地址为: 红茶一杯话Binder 1 什么是Binder? 简单地说.Binder是Android平台上的一种跨进程交互技术. 该技术最早并非由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,并且在Palm中也有应用.后来OpenBinder的作者Dianne Hackborn增加了Google公司,并负责Android平台的开发工作,所以把这项技术也带进了Android. 我们知道.在Andro…
以下几篇文章是分析binder机制里讲得还算清楚的 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android - Binder机制 - Binder框架总结 6. Android - Binder机制 - ProcessS…
写给 Android 应用工程师的 Binder 原理剖析 一. 前言 这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔.生怕自己理解上还有偏差,对大家造成误解,贻笑大方.又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的设计精髓.直到今天提笔写作时还依旧战战兢兢. Binder 之复杂远远不是一篇文章就能说清楚的,本文想站在一个更高的维度来俯瞰 Binder 的设计,最终帮助大家形成一个完整的概念.对于应用层开发的同学来说,理解到本文这个程度也就差不多了…
一. 前言 希望更加深入理解 Binder 实现机制的,可以阅读文末的参考资料以及相关源码. 二. Binder 概述 简单介绍下什么是 Binder.Binder 是一种进程间通信机制,基于开源的 OpenBinder 实现:OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手.从字面上来解释 Binder 有胶水.粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信.对于 Binder 更全面的定义,等我们介绍完 Binder 通信原理后再做详细说明. 2.1…
上篇文章中分析了Custom Binder的弊端: 由于Custom Binder是和具体的类型相关,比如指定类型A由我们的Custom Binder解析,那么导致系统运行中的所有Action的访问参数,只要是类型A, 都会使用Custom Binder. 这篇文章将会介绍Binder Attribute方式扩展MVC的Model Binder, 这种方式更加的灵活和可操控. 本篇文章参考了ModelBinder——ASP.NET MVC Model绑定的核心, 结合Artech的这篇文章,对于…
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 Android : 跟我学Binder --- (3) C程序示例 Android : 跟我学Binder --- (4) 驱动情景分析 Android : 跟我学Binder --- (5) C++实现 Android : 跟我学Binder --- (6)  JAVA实现 一.Java程序的编…
文件目录结果如下: 一. 编写AIDL文件 IHelloService.aidl: /** {@hide} */ interface IHelloService { void sayhello(); int sayhello_to(String name); } 1. 把 IHelloService.aidl 放入 frameworks/base/core/java/android/os2. 修改 frameworks/base/Android.mk 添加一行 core/java/android…
一.Native层Binder 源码结构: ClientDemo.cpp: 客户端程序 ServerDemo.cpp:服务端程序 IMyService.h:自定义的MyService服务的头文件 IMyService.cpp:自定义的MyService服务 Android.mk:源码build文件 1.1 服务端 #include "IMyService.h" int main() { //获取service manager引用 sp < IServiceManager >…
Java实现中client端的RPC层(java实现)如何通过JNI来调用IPC层(C++实现)发送数据 TestServer通过addService向Service_manager注册的时候TestServer是Client端,Service_manager是Server端: TestClient通过getService向Service_manager请求服务的时候TestClient是Client端,Service_manager是Server端: TestClient调用RPC层的sayh…
怎么做?2.1 定义接口: 写IHelloService.aidl文件, 上传, 编译, 得到IHelloService.java 里面有Stub : onTransact, 它会分辨收到数据然后调用sayhello, sayhello_to有Proxy : 提供有sayhello, sayhello_to两个函数, 它们会构造数据然后发送给server (这样我们就不用像C++那样实现BnHelloService和BpHelloService了) 2.2 实现服务类: HelloService…
众所周知,在Android中Camera采用了C/S架构,其中Camera server 与 Camera client之间通过Android Binder IPC机制进行通信.在Camera实现的框架中,除开HAL层以及驱动层以下是采用的C语言进行编写以外,其余的都是c++ 和java这两大经典面向对象的语言来实现的.网络上大部分的分析,是基于一个client端对server端的过程调用,一步一步的深入到驱动底层.而我自己,更愿意从对象的角度来分析camera的脉络.其实,整个Camera框架…
版权声明:本站所有博文内容均为原创,转载请务必注明作者与原文链接,且不得篡改原文内容.另外,未经授权文章不得用于任何商业目的. 一.引言 Android系统非常庞大.错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall)连通系统的内核空间与用户空间.用户空间主要采用C++和Java代码,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而融为一体. Google官方提供了一张经典的四层架构图,从下往上依次分…
  原文链接:http://www.zhihu.com/question/33636939     程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?修改 Android(Java)开发中,有哪些方法或类(接口)很实用,但是你却没能在第一时间知道它?当有一天你发现它时,只想说一句:“What the f**k,还有这个!”修改 举报 添加评论分享• 邀请回答   按投票排序按时间排序 28 个回答 赞同123反对,不会显示…
简介 Window简介 Android中,Window是一个重要部分,用户看到的界面.触摸显示界面进行一系列操作都涉及到Window.但实际上,Window本身并不具备绘制功能. 该篇简单介绍下Window的一点内容,同时总结下WMS的启动过程.在下篇会逐步介绍一个Activity是如何创建出窗口 并 添加到WMS中的. 该篇基于Andorid10的代码. 窗口涉及到一下几个功能: 窗口管理-WMS WMS管理窗口的创建.添加.删除.大小.层级等等. 输入中转-IMS(InputManagerS…
1.开关按钮位置:   设置--> 更多--> 移动网络--> 增强型4G LTE模式 2.该设置开关使用了SwitchPreference控件,addEnhanced4GLteSwitchPreference()添加控件:  packages/services/telephony/src/com/android/phone/MobileNetworkSettings.java private void addEnhanced4GLteSwitchPreference(Preferenc…
在Custom_NvRam_LID.h中,找到需要读取的ID对应的值 实现NvRAMAgent import java.lang.String; import android.os.RemoteException; import android.os.IBinder; import android.os.IInterface; import android.os.Binder; import android.os.Parcel; public interface NvRAMAgent exten…
增加暗码命令切换开关机logo功能 u-boot logo显示原理: 1.----Little Kernel会在platform_early_init阶段首先会获取lcm params,其工作流 程就是透过读id找到现在插入的LCM,根据LCM的分辨率申请相应大小的frame buffer 并确定frame buffer起始地址 2. 为logo.bin预留4M Ram 3. 之后在platform_init阶段,直接将logo.bin载入到4M Ram中 4, 完成载入后,在platform_…
前言 最近有需求需要实现插卡默认打开Volte功能,顺带研究了下Volte的流程,在此做个记录 开始 从Settings设置界面入手,网络和互联网-->移动网络-->VoLTE高清通话(电信卡)/增强型4G LTE模式(移动卡) 找到网络和互联网加载对应的Fragment为NetworkDashboardFragment, 源码位置 vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\ne…
开关按钮位置: 设置--> 更多--> 移动网络--> 增强型4G LTE模式 控件初始化addEnhanced4GLteSwitchPreference,该设置开关使用了SwitchPreference控件,addEnhanced4GLteSwitchPreference()添加控件(packages/services/telephony/src/com/android/phone/MobileNetworkSettings.java) private void addEnhanced…
问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不影响速度 问题地址: http://www.thegrouplet.com/thread-112926-1-1.html 问题: 除了WORDPRESS大家还用什么其他的博客程序额? 月光答复: Typecho这种虽然简单,但是如果你有特殊需要,找插件和模板就难多了 各有各的好  ... 问题地址:…
摘要 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势.深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化.本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求:然后分别阐述Binder在系统不同部分的表述方式和起的作用:…
原文地址(貌似已打不开):Android Binder设计与实现 – 设计篇 ----------------------------------------------------------------------- 目录 1. Android为何引入Binder 2. 面向对象的 Binder IPC 3. Binder通信模型 3.1 Binder 驱动 3.2 ServiceManager 与实名Binder 3.3 Client 获得实名Binder的引用 3.4 匿名 Binder…
上一篇 Binder机制,从Java到C (2. IPC in System Service :AMS)  中提到 Application是通过ServiceManager找到了AMS 的service代理对象.那在这个之前当然是要先找到ServiceManager的代理对象,才能调用ServiceManager的服务嘛.下面就看看怎么来获得这个代理对象的吧: 还记得上一篇调用的ServiceManager的方法吧:IBinder b = ServiceManager.getService("a…
在第三篇 Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java.实际上,还要加一句:Native里也有Proxy(BpServiceManager),因为ServiceManager也是要服务于其他native service嘛. ServiceManager是一个在init.rc里定义的一个system process,在系统启动的时候,它就启动了.如果它挂了,那么像zy…