现在位置: 首页 > 移动开发 > 文章
2018年06月10日 ⁄ 综合 ⁄ 共 25410字 评论关闭
Binder Android IPC Linux 内核 驱动 摘要 Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system VIPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求;然后分别...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 4778字 评论关闭
我首先从宏观的角 度观察Binder,Service,Service Manager,并阐述各自的概念。从Linux的概念空间中,Android的设计Activity托管在不同的的进程,Service也都是托管在不 同的进程,不同进程间的Activity,Service之间要交换数据属于IPC。Binder就是为了Activity通讯而设计的一个轻量级的 IPC框架。   在代码分析 中,我发现Android中只是把Binder理解成进程间通讯的实现,有点狭隘,而是应该站在公共对象请求代理这个高度来...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 11629字 评论关闭
文章目录 1. Binder的组成 2. Binder的运作 3. 程序中Binder的具体实现 1. Binder的组成 1.1. 驱动程序部分 驱动程序的部分在以下的文件夹中: show source view source print ? 1 kernel/include/linux/binder.h 2 kernel/drivers/android/binder.c binder驱动程序是一个miscdevice,主设备号为10,此设备号使用动态获得(MISC_DYNAMIC_MI...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 3141字 评论关闭
1.文件描述符是如何在进程之间传递的? 我们知道文件描述符,就像虚拟内存的地址一样,是进程私有的资源。在一个进程中文件描 述符,在另外一个进程中,可能是无效的,也可能是对应另外一个文件。 Android却可以把文件描述符从一个进程传到另外一个进程。第一次发现这种情况时,让我感到很惊奇,所以花了点时间去研究。看明白之后,发现其实现也 很简单: 1 2 3 4 5 6 7 8 9 status_t Parcel:: writeFileDescr...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 9299字 评论关闭
SurfaceFlinger 是Android multimedia 的一个部分,在Android 的实现中它是一个service ,提供系统 范围内的surface composer 功能,它能够将各种应用 程序的2D 、3D surface 进行组合。在具体讲SurfaceFlinger 之前,我们先来看一下有关显示方面的一些基础 知识 。   1 、原理 分析 让我们首先看一下下面的屏幕简略图:     每个应用程序可能对应着一个或者多个图形界面,而每个界面我们就称之为一个surface...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 12594字 评论关闭
引子 Android Framework的音频子系统中,每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到 AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合(Mixer),然后输送到AudioHardware中 进行播放,目前Android的Froyo版本设定了同时最多可以创建32个音频流,也就是说,Mixer最多会同时处理32个AudioTrack的数 据流。 如何使用AudioTrack AudioTrack的主要代码位于 frameworks/base/media/l...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 8560字 评论关闭
编译之前我们一般都怎么做? 我们在编译android之前,通常会输入一些命令,比如: . ./bulid/envsetup.sh ... lunch ... make ... 这里的envsetup.sh就是设置android的编译环境,初始化各种变量,比如设备类型什么的,下面是我在我的板子上执行上述命令的结果: mic@micpc:~/work/android4.0.4$ . ./build/envsetup.sh including device/moto/stingray/vendorsetup.sh including device/moto/wingray/vendorsetup.sh includi...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 2853字 评论关闭
原帖地址,感谢您的无私分享! http://blog.csdn.net/eastmoon502136/article/details/8721510 关于wlan的组成   关于wifi应用层的接口的调用         首先从上层android wifi的应用开始,首先会根据android的wifimanager的类,实例化一个mwifimanager的对象,这个对象处理了所有wifi需要处理的任务,接着比如说打开wifi,那么就会调用 mWifiManager.isWifiEnabled();判断wifi是否已经打开,如果没有打开,那么就会调用mWifi...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 2857字 评论关闭
1.external/clearsilver/cgi/cgi.c:22:18: 致命错误: zlib.h:没有那个文件或目录 编译中断。 解决方法:sudo apt-get install zlib1g-dev 2. prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: 致命错误: X11/Xlib.h:没有那个文件或目录 解决方法:sudo apt-get install libx11-dev 3.host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp <命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义 [-Werr...
阅读全文
2018年06月10日 ⁄ 综合 ⁄ 共 2148字 评论关闭
1.创建通知 网上通知大部分的写法是: 创建通知实例:Notification notification = new Notification(R.drawable.home,"title",when);  加载PendingIntentset:使用LatestEventInfo()方法 但是不知道各位有没有注意到LatestEventInfo()是一个已经废弃了的方法。官方推荐的方法是使用v4支持包下的NotificationCompat.Builder类创建实例,再调用manager.notify(id, builder.build())发生通知。其实V4包下的类和android.app包里的...
阅读全文