Android Binder学习趣事

看Android源码无论如何绕不开Binder,因此我一直对Binder的实现机制有浓厚的兴趣。无奈本人功力不够,所以对此一直没有清晰的认识。看了网上一些分析Binder的文章,基本都是源码分析,我觉得对于Binder这样一种比较复杂的框架,最好不要一开始就进入到源码这么细节的层面,很容易找不到北。我觉得应该先撇开代码,有原理性的介绍,再根据个人需要深入代码去分析。因为没有找到合适的文章,所以我就想自己来探究,自己来写,我主要想解决以下几个问题:
1. Binder的历史?
2. Binder和Linux原有的IPC有什么区别,为什么一定要用Binder?
3. Binder整体的设计是怎样的?
4. Binder的跨进程数据传输是怎么实现的?

但是,正当我准备自己动手探究时,却找到一篇很不错的文章Android Binder design and implementation design,一下子把我的问题都回答了,开心,又有点失落。这真是一篇高质量的文章,我想我可以把它翻译成中文,跟大家分享。然而紧接着在里面一个例子中看到"Zhang San"。心里惊呼“难道原文是中文?”。还真找到了,原文在CSDN上Android Bander设计与实现 - 设计篇。这下只有为国人感到自豪了。这篇文章清晰地阐述了Binder的设计实现机制,清晰易懂。

整体的设计已经了然于胸,就可以自己去看代码,亲自触摸里面的实现细节。网上有不少源码分析的文章,最有名的要数老罗的。但是我觉得源码就像一个丰富的宝库,源码分析应该是带着问题,有目的地去分析,不然只会被别人牵着鼻子走,或者迷失其中。就像老罗在系统地分析Android源码前也是看了很多书(见那两年炼就的Android内功修养)。

除了阅读源码,了解Binder的实现细节,我还想了解Linux原有的IPC机制,例如管道,System V IPC,socket是如何设计的,其设计思想和出发点各有什么不同?此处先留着问题,后面再探究总结。

时间: 2024-11-02 02:11:21

Android Binder学习趣事的相关文章

我的Android进阶之旅------>Android Service学习之AIDL, Parcelable和远程服务实例

通过上一篇(Android Service学习之AIDL, Parcelable和远程服务)的介绍,这一篇写一个小实例来实践一下 step1:建立两个应用,分别为RemoteService和RemoteServiceClient                                         先编写服务器端的内容 step2:开始编写一个StudentQuery.aidl文件      AIDL(Android Interface Definition Language),用来定

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

  [Android布局学习系列]   1.Android 布局学习之--Layout(布局)详解一   2.Android 布局学习之--Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之--LinearLayout的layout_weight属性   4.Android 布局学习之--LinearLayout属性baselineAligned的作用及baseline      Layout Parameters(布局参数):            在XML文

Android开发学习---使用Intelij idea 13.1 进行android 开发

原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比Intelij idea好用,就试下,目前还在test阶段,总之是各种不习惯,很多快捷键之类的跟eclipse完全不一样.还要多熟悉! 另外android studio 也比较卡,而且用起来相当难受,完全是intelij 的

友善之臂Mini6410之Android开发学习笔记(4)-EEPROM Demo

友善之臂Mini6410之Android开发学习笔记源码同步更新,请使用git工具进行同步.关于Git工具更多信息,请参考:http://progit.org/book/zh/ git clone https://code.google.com/p/androiddemoformini6410/ EEPROMActivity.java package com.mini6410.EEPROM; import android.app.Activity; import android.os.Bundl

友善之臂Mini6410之Android开发学习笔记(1)-LED Demo

友善之臂Mini6410之Android开发学习笔记源码同步更新,请使用git工具进行同步.关于Git工具更多信息,请参考:http://progit.org/book/zh/ git clone https://code.google.com/p/androiddemoformini6410/ LEDActivity.java package com.mini6410.LED; import com.friendlyarm.AndroidSDK.HardwareControler; impor

《Android Studio应用开发实战详解》——第1章,第1.5节Android开发学习路线图

1.5 Android开发学习路线图 Android系统是一个巨大的智能设备系统,从系统架构到最终的问世发布,并经过一步步的完善,整个过程无不体现了科技界巨头--谷歌公司工程师们的智慧结晶.作为一名Android开发初学者来说,刚接触时会有或多或少的迷茫.在本节的内容中,将引领读者一起探讨Android开发的学习之路. 1.5.1 Android开发的两大方向 1.应用程序开发方向 移动应用程序就是经常提到的APP程序,和1.3.5节中的内容相对应,通常使用Java语言实现.这是当前Androi

Android编程学习之异步加载图片的方法_Android

本文实例讲述了Android编程学习之异步加载图片的方法.分享给大家供大家参考,具体如下: 最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存溢出问题,一般情况下,加载一张大图就会导致内存溢出,同样,加载多张图片内存溢出的概率也很高. 列一下网络上查到的一般做法: 1.使用BitmapFactory.Options对图片进行压缩 2.优化加载图片的

Android 数字签名学习笔记

  Android 数字签名学习笔记    在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限.Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机

嵌入式linux、QT、ARM、android研发学习交流,软考嵌入式系统设计师交流群,欢迎大家加入,群号95388240

 嵌入式linux.QT.ARM.android研发学习交流,软考嵌入式系统设计师交流群,欢迎大家加入,群号95388240