- 浏览: 237068 次
- 性别:
- 来自: 湖南
最新评论
-
yuxuejun1123:
为什么没有powerPC,个人觉得这篇文章把mips和powe ...
ARM MIPS PowerPC比较 -
yy232:
我刚学这个,有点疑问,希望你能为我解答 你说 “任何人只 ...
centos的用户、组权限、添加删除用户等操作的详细操作命令 -
wstxdz1023:
就那么几句代码,全是问题
socket 心跳
client获取Service的远程IBinder接口 以CameraService为例(camera.cpp): const sp<ICameraService>& Camera::getCameraService() { Mutex::Autolock _l(mLock); if (mCameraService.get() == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { binder = sm->getService(String16("media.camera")); if (binder != 0) break; LOGW("CameraService not published, waiting..."); usleep(500000); // 0.5 s } while(true); if (mDeathNotifier == NULL) { mDeathNotifier = new DeathNotifier(); } binder->linkToDeath(mDeathNotifier); mCameraService = interface_cast<ICameraService>(binder); } LOGE_IF(mCameraService==0, "no CameraService!?"); return mCameraService; } 由前面的分析可知sm是BpCameraService对象: virtual sp<IBinder> getService(const String16& name) const { unsigned n; for (n = 0; n < 5; n++){ sp<IBinder> svc = checkService(name); if (svc != NULL) return svc; LOGI("Waiting for sevice %s...\n", String8(name).string()); sleep(1); } return NULL; } virtual sp<IBinder> checkService( const String16& name) const { Parcel data, reply; data.writeInterfaceToken(IServiceManager::getInterfaceDescriptor()); data.writeString16(name); remote()->transact(CHECK_SERVICE_TRANSACTION, data, &reply); return reply.readStrongBinder(); } 这里的remote就是我们前面得到BpBinder对象。所以checkService将调用BpBinder中的transact函数: status_t BpBinder::transact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { // Once a binder has died, it will never come back to life. if (mAlive) { status_t status = IPCThreadState::self()->transact( mHandle, code, data, reply, flags); if (status == DEAD_OBJECT) mAlive = 0; return status; } return DEAD_OBJECT; } mHandle为0,BpBinder继续往下调用IPCThreadState:transact函数将数据发给与mHandle相关联的Service Manager Process。 status_t IPCThreadState::transact(int32_t handle, uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { ............................................................ if (err == NO_ERROR) { LOG_ONEWAY(">>>> SEND from pid %d uid %d %s", getpid(), getuid(), (flags & TF_ONE_WAY) == 0 ? "READ REPLY" : "ONE WAY"); err = writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL); } if (err != NO_ERROR) { if (reply) reply->setError(err); return (mLastError = err); } if ((flags & TF_ONE_WAY) == 0) { if (reply) { err = waitForResponse(reply); } else { Parcel fakeReply; err = waitForResponse(&fakeReply); } .............................. return err; } 通过writeTransactionData构造要发送的数据 status_t IPCThreadState::writeTransactionData(int32_t cmd, uint32_t binderFlags, int32_t handle, uint32_t code, const Parcel& data, status_t* statusBuffer) { binder_transaction_data tr; tr.target.handle = handle; //这个handle将传递到service_manager tr.code = code; tr.flags = bindrFlags; 。。。。。。。。。。。。。。 } waitForResponse将调用talkWithDriver与对Binder kernel进行读写操作。当Binder kernel接收到数据后,service_mananger线程的ThreadPool就会启动,service_manager查找到 CameraService服务后调用binder_send_reply,将返回的数据写入Binder kernel,Binder kernel。 status_t IPCThreadState::waitForResponse(Parcel *reply, status_t *acquireResult) { int32_t cmd; int32_t err; while (1) { if ((err=talkWithDriver()) < NO_ERROR) break; .............................................. } status_t IPCThreadState::talkWithDriver(bool doReceive) { ............................................ #if defined(HAVE_ANDROID_OS) if (ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr) >= 0) err = NO_ERROR; else err = -errno; #else err = INVALID_OPERATION; #endif ................................................... } 通过上面的ioctl系统函数中BINDER_WRITE_READ对binder kernel进行读写。
发表评论
-
Linux x86 编译 Android 遭遇 gnu/stubs-64.h
2011-08-19 10:43 1858这两天心血来潮,执行完 repo sync 后,顺手来了一下 ... -
使用Cygwin下载Android代码树
2011-03-16 20:45 1578--官方说明-- To set up y ... -
Cygwin在win下下载android源代码
2011-03-16 20:43 1072首先下载cygwin,cygwin是一个类linux平台。即在 ... -
Android NDK 环境搭建 - 安装配置 Cygwin
2011-03-16 20:40 29561. NDK 下载 最新版 Android NDK 开发工具包 ... -
Android-触感反馈和声音反馈的效果实现
2011-03-15 12:07 29451)只有系统设置中打开触感反馈选项,方法performHa ... -
socket的服务端框架
2011-03-07 14:17 2700最近查了不少java下面nio ... -
android UI 优化系列之 创建RGB565的缓存
2011-03-05 16:42 1891关于如何优化activity的 ... -
SocketChannel 和 DatagramChannel
2011-03-05 16:19 1922SocketChannel 叫套接字通道,面向流,就是通 ... -
Android 调试工具集
2011-03-05 13:25 12511.TraceView1)功能:用于热点分析和性 ... -
Android 中文API (33) —— Checkable
2011-03-03 17:45 1110声明 欢迎转载,但请保留文章原始出处:) ... -
Toast 和 Looper
2011-03-03 09:02 1136Toast 和 Looper,一个属于 android.w ... -
Activity 与 Main Loope
2011-03-03 08:59 1024上文抛出了一个疑问:UI 线程是在哪里绑定 Looper ... -
Class loading in Android : Begin with PathClassLoader
2011-03-03 08:56 1175Google 在 Android 文档里的《What is ... -
Linux x86 编译 Android 遭遇 gnu/stubs-64.h
2011-03-03 08:54 1253这两天心血来潮,执行完 repo sync 后,顺手来了一 ... -
读《Multitasking the Android Way》(一)
2011-03-03 08:50 1167Android Developers Blog 发表了一篇 ... -
从 Remote Service Binding 学习 AIDL 与 IPC
2011-03-03 08:47 1550默认情况下,一个应用不管有多少个 Activity、Ser ... -
Android SDK Add-on Configure, Compile and Release
2011-03-03 08:44 1900SDK Add-on 是一个比较小众的话题,一是通常厂商不 ... -
Activity Task 与 Intent Filter Flag
2011-03-03 08:42 1247接触 Android 以来,一直觉得对 task、affi ... -
android的原理,不需要太多的剩余内存
2011-03-02 16:05 924不用在意剩余内存的大 ... -
Android IPC框架分析 Binder,Service,Service manager
2011-03-02 15:19 1375我首先从宏观的角度 ...
相关推荐
在Android系统中,Binder通信机制是其核心的进程间通信(IPC)方式,相较于其他Linux系统中的IPC方式如socket、named pipe、message queue等,Binder以其高效性与独特设计成为Android首选。 Binder通信依赖于Linux...
Android IPC(Inter-Process Communication)通信机制是Android系统中用于不同进程之间进行数据交换和功能调用的关键技术。本文将深入解析Android中的Binder通信机制,包括其原理、优点以及源码层面的实现。 Binder...
有关Android IPC进程间通讯的源码分析
Android IPC机制总结,概念,使用场景,开启多进程模式,运行机制,优缺点以及场景等等
在Android系统中,IPC(Inter-Process Communication,进程间通信)是不同应用程序之间共享数据和协同工作的关键机制。本文将深入探讨Android IPC机制,并通过具体的ContentProvider和Socket通信实例进行详细解析。 ...
AndroidIPC, 各种 Android IPC机制示例 AndroidIPC各种 Android IPC机制示例构建和运行你需要来自adb的root 许可$ ndk-build$ adb push libs/armeabi-v7a/ipc/data/local/$ a
Android进程间通信(IPC)机制Binder简要介绍和学习计划
在Android平台上,IPC(Inter-Process Communication)是不同应用程序之间进行通信的重要机制。它允许不同进程之间共享数据、服务和执行跨进程操作。本资源主要提供了Android IPC客户端的源码,这对于开发者深入理解...
简要介绍Android IPC机制Binder
[AndroidIPC机制(1)-进程和线程](note/AndroidIPC机制[AndroidIPC机制(2)-序列化机制](note/AndroidIPC机制[AndroidIPC机制(3)-AIDL](note/AndroidIPC机制[AndroidIPC机制(4)-Messenger](note/AndroidIPC...
IPC analysis on android with a demo (基于IPC实例分析android IPC机制) 代码分析,请参考:http://blog.csdn.net/safrans/article/details/6272652
当服务需要与其他应用组件或进程进行跨进程通信(IPC,Inter-Process Communication)时,Android提供了多种机制,其中一种就是Messenger。本文将深入探讨Android Service中的IPC通信机制——Messenger。 Messenger...
其中,Binder是Android IPC框架的核心组件,它为对象导向的服务提供了一个高效的通信机制。 Binder框架为Android开发者提供了一个非常重要的机制,使得进程之间可以像调用本地对象的方法一样调用远程服务。这种方式...
《Android IPC与Binder框架》是高焕堂先生深入解析Android系统中进程间通信(IPC)机制及其核心组件Binder的专业著作。这本书详细阐述了Android系统如何通过Binder实现不同进程间的高效、安全的数据交换,为开发者...
在Android中,除了继承自Linux的IPC机制外,还引入了一种高效的进程间通信机制——Binder。 1. **Binder**:Binder是Android系统的核心IPC机制。它通过Linux内核中的Binder驱动实现,具有高效、低延迟的特点。...
在"android_ipc_0430"这个压缩包文件中,可能包含了相关的代码示例、讲解文档或者项目源码,可以帮助读者更深入地理解和实践Android IPC通信。通过学习这些实例,开发者能够熟练掌握各种IPC机制,并能根据实际需求...
标题中的“AndroidIPC_apk”指的是一个Android应用,专门用于处理IPC(Inter-Process Communication,进程间通信)的实现,特别是在Android系统上基于Onvif协议的IPC功能。Onvif(Open Network Video Interface ...