binder

Android深入浅出之Binder机制

て烟熏妆下的殇ゞ 提交于 2020-02-28 22:04:31
Android 深入浅出之 Binder 机制 一 说明 Android 系统最常见也是初学者最难搞明白的就是 Binder 了,很多很多的 Service 就是通过 Binder 机制来和客户端通讯交互的。所以搞明白 Binder 的话,在很大程度上就能理解程序运行的流程。 我们这里将以 MediaService 的例子来分析 Binder 的使用: l ServiceManager ,这是 Android OS 的整个服务的管理程序 l MediaService ,这个程序里边注册了提供媒体播放的服务程序 MediaPlayerService ,我们最后只分析这个 l MediaPlayerClient ,这个是与 MediaPlayerService 交互的客户端程序 下面先讲讲 MediaService 应用程序。 二 MediaService 的诞生 MediaService 是一个应用程序,虽然 Android 搞了七七八八的 JAVA 之类的东西,但是在本质上,它还是一个完整的 Linux 操作系统,也还没有牛到什么应用程序都是 JAVA 写。所以, MS(MediaService) 就是一个和普通的 C++ 应用程序一样的东西。 MediaService 的源码文件在: framework\base\Media\MediaServer\Main

android binder 收藏文献

混江龙づ霸主 提交于 2020-02-26 18:11:54
Android Service 两种启动方式详解(总结版) https://www.jianshu.com/p/4c798c91a613 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 https://blog.csdn.net/freekiteyu/article/details/70082302 Binder详解 https://blog.csdn.net/yangzhiloveyou/article/details/14043801 Binder 系列 1—Binder Driver 初探 http://gityuan.com/2015/11/01/binder-driver/ Android - Binder 驱动 https://www.cnblogs.com/Doing-what-I-love/p/5530173.html Android 跨进程通信 IPC 之 8——Binder 驱动 https://www.jianshu.com/p/2efc0971c3e0 Android Binder http://kernel.meizu.com/android-binder.html Android Binder设计与实现 - 实现篇 https://www.cnblogs.com/albert1017/p/3849585.html 彻底理解

Binder IPC的权限控制

可紊 提交于 2020-02-26 09:41:19
copy from : http://gityuan.com/2016/03/05/binder-clearCallingIdentity/ 基于Android 6.0的源码剖析, 分析Binder IPC通信的权限控制方法clearCallingIdentity和restoreCallingIdentity的原理和用途。 frameworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.cpp frameworks/native/libs/binder/IPCThreadState.cpp 一、概述 在 Binder系列 中通过十篇文章,深入探讨了Android M的Binder IPC机制。看过Android系统源代码的朋友,一定看到过 Binder.clearCallingIdentity() 和 Binder.restoreCallingIdentity() 这两个方法,其定义在 Binder.java 文件: //作用是清空远程调用端的uid和pid,用当前本地进程的uid和pid替代; public static final native long clearCallingIdentity(); //作用是恢复远程调用端的uid和pid信息,正好是

Binder死亡通知机制之linkToDeath

拈花ヽ惹草 提交于 2020-02-26 09:41:00
copy from : http://gityuan.com/2016/10/03/binder_linktodeath/ 基于Android 6.0源码, 涉及相关源码 frameworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.cpp frameworks/native/libs/binder/BpBinder.cpp 一. 概述 死亡通知是为了让Bp端(客户端进程)进能知晓Bn端(服务端进程)的生死情况,当Bn端进程死亡后能通知到Bp端。 定义:AppDeathRecipient是继承IBinder::DeathRecipient类,主要需要实现其binderDied()来进行死亡通告。 注册:binder->linkToDeath(AppDeathRecipient)是为了将AppDeathRecipient死亡通知注册到Binder上。 Bp端只需要覆写binderDied()方法,实现一些后尾清除类的工作,则在Bn端死掉后,会回调binderDied()进行相应处理。 1.1 实例说明 public final class ActivityManagerService { private final boolean

获取动态类型变量的属性值

↘锁芯ラ 提交于 2020-02-26 09:13:29
public static object GetProperty(object o, string member) { if(o == null) throw new ArgumentNullException("o"); if(member == null) throw new ArgumentNullException("member"); Type scope = o.GetType(); IDynamicMetaObjectProvider provider = o as IDynamicMetaObjectProvider; if(provider != null) { ParameterExpression param = Expression.Parameter(typeof(object)); DynamicMetaObject mobj = provider.GetMetaObject(param); GetMemberBinder binder = (GetMemberBinder)Microsoft.CSharp.RuntimeBinder.Binder.GetMember(0, member, scope, new CSharpArgumentInfo[]{CSharpArgumentInfo.Create(0, null)});

IPC框架分析 Binder,Service,Service manager

核能气质少年 提交于 2020-02-17 23:25:03
http://blog.csdn.net/maxleng/article/details/5490770 IPC框架分析 Binder,Service,Service manager 我首先从宏观的角度观察Binder,Service,Service Manager,并阐述各自的概念。从Linux的概念空间中,Android的设计Activity托管在不同的的进程,Service也都是托管在不同的进程,不同进程间的Activity,Service之间要交换数据属于IPC。Binder就是为了Activity通讯而设计的一个轻量级的IPC框架。 在代码分析中,我发现Android中只是把Binder理解成进程间通讯的实现,有点狭隘,而是应该站在公共对象请求代理这个高度来理解Binder,Service的概念,这样我们就会看到不一样的格局,从这个高度来理解设计意图,我们才会对Android中的一些天才想法感到惊奇。从Android的外特性概念空间中,我们看不到进程的概念,而是Activity,Service,AIDL,INTENT。一般的如果我作为设计者,在我们的根深蒂固的想法中,这些都是如下的C/S架构,客户端和服务端直接通过Binder交互数据,打开Binder写入数据,通过Binder读取数据,通讯就可以完成了。 该注意到Android的概念中,Binder是一个很低层的概念

[置顶] Android开发之MediaPlayerService服务详解(一)

那年仲夏 提交于 2020-02-14 00:14:56
前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState。ProcessState负责打开Binder 驱动,每个进程只有一个。而 IPCThreadState负责提供与Binder通信相关的接口,每个线程有一个。下面我们通过具体 示例MediaPlayerService来分析我们应用程序中怎么通过Binder通信的。 frameworks/base/media/mediaserver/main_mediaserver.cpp int main(int argc, char*argv[]) { sp<ProcessState> proc(ProcessState)::self(); // 获得ProcessState在构造函数中打开binder驱动 sp<IServiceManager> sm = defaultServiceManager(); MediaPlayService::instantiate(); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); } 1)获得ServiceManager的代理BpServiceManager sp<IServiceManager> sm =

谈谈Android Binder机制及AIDL使用

Deadly 提交于 2020-02-05 22:25:23
Binder原理 1、概述 Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进 程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于 此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信, Interprocess Communication )方案。 当然也存在部分其他的IPC方式,如管道、SystemV、Socket等。那么Android为什 么不使用这些原有的技术,而是要使开发一种新的叫Binder的进程间通信机制呢? ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS (VX:mm14525201314) 为什么要使用Binder? 性能方面 在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信 机制的性能有严格的要求,Binder相对于传统的Socket方式,更加高效。Binder数 据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内 存拷贝都不需要,但实现方式又比较复杂。 安全方面 传统的进程通信方式对于通信双方的身份并没有做出严格的验证,比如Socket通信 的IP地址是客户端手动填入,很容易进行伪造

binder的异常处理

ぐ巨炮叔叔 提交于 2020-02-05 19:06:36
binder的异常处理真的很捉急,一开始我以为RemoteException可以跨进程交互,之后看了资料和源码才知道,RemoteException根本就支持跨进程传递 在Parcel.java源码注明了可以传递的几种异常 public final void writeException ( Exception e ) { int code = 0 ; if ( e instanceof Parcelable && ( e . getClass ( ) . getClassLoader ( ) == Parcelable . class . getClassLoader ( ) ) ) { // We only send Parcelable exceptions that are in the // BootClassLoader to ensure that the receiver can unpack them code = EX_PARCELABLE ; } else if ( e instanceof SecurityException ) { code = EX_SECURITY ; } else if ( e instanceof BadParcelableException ) { code = EX_BAD_PARCELABLE ; } else if ( e

论一个APP从启动到主页面显示经历的过程?

谁说胖子不能爱 提交于 2020-02-04 10:37:14
前言 (个人观点.不喜勿喷) 本部分内容是关于Android进阶的一些知识总结,涉及到的知识点比较杂,不过都 是面试中几乎常问的知识点,也是加分的点。 关于这部分内容,可能需要有一些具体的项目实践。在面试的过程中,结合具体自 身实践经历,才能更加深入透彻的描绘出来。 ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS 一、流程概述 启动流程: ① 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起 startActivity 请求; ② system_server进程接收到请求后,向zygote进程发送创建进程的请求; ③ Zygote进程fork出新的子进程,即App进程; ④ App进程,通过Binder IPC向sytem_server进程发起 attachApplication 请求; ⑤ system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向 App进程发送 scheduleLaunchActivity 请求; ⑥ App进程的binder线程( ApplicationThread )在收到请求后,通过handler向主线 程发送LAUNCH_ACTIVITY消息; ⑦