Android学习之——Binder学习入门篇

简介: 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/79533583 前言     已经不知道多久没有学习,没有写博客了。
版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/79533583

前言

     已经不知道多久没有学习,没有写博客了。昨天看到一句“一个好的程序员,还是一名作家。”  感觉自己不应该一天老给自己找借口说工作太忙,没时间学习。废话不多说,下面进入今天的正题那就是大多数Android程序员为之头疼的东西——Binder。但是,Binder又是面试时大多数面试官会问的问题。关于Binder的资料网上有很多很多,但是,由于Binder代码本身就比较枯燥,很多资料都是长篇大论,看着看着就看不下去了。下面简单谈谈Binder。

一、什么是Binder?

     关于“什么是Binder?”这个问题,从刚哥的《Android开发艺术与探索》第二章 IPC机制 2.3.3Binder中,简单总结如下:

1、Binder是一个类,实现了IBinder接口。(直观)

2、Binder是Android中一种跨进程通信的模式。(IPC)

3、Binder是一种虚拟物理物理设备,它的设备驱动是/dev/binder。(物理层)

4、Binder是链接ServiceManager链接各种,Manager(ActivityManager\WindowManager等)和ManagerService之间的桥梁。(Android Framework )

5、Binder是一个客户端和服务端进行通信的媒介。(应用层)

可能这样直接说还是不太明白,我们从Android的整体架构来看(如下图所示,图片引用自:https://source.android.com),Binder 是处于 Android FrameWork跟Android System Services之间。


我们主要从图中也可以看出“Android系统是一种基于Binder的通信机制(个人观点,如果不对请指正)”。

二、Binder的应用场景

那么什么时候会用到Binder昵?那就是跨进程通信(IPC)时,如上图所示Android调用所有的Android System Service时都会用到Binder,主要包括AIDL和Messenger,说到这里还是不得不提一下操作系统中的基础知识:什么是进程?进程与线程有什么区别?

进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

区别:一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.一个程序至少有一个进程,一个进程至少有一个线程.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

什么是AIDL?怎么用?

*AIDL:Android Interface definition Language 安卓接口定义语言

(1)作用:发布和调用远程服务,实现跨进程通信

(2)将服务的aidl放到对应的src文件夹中,工程的gen会产生对应的接口类

(3)通过bindservice方法绑定远程服务

(4)通过IBinder 获取到的对象,该对象既可以和我们的进程通信,又可以和远程进程通信,充当了中间通信的角色。

三、浅谈Binder的工作原理

      关于Binder的工作原理的资料非常多,我目前看的也有些晕,不对的地方请大家指正,个人理解如下:

关于Binder的架构模式是C/S模式,主要有四个对象Client、Server、Service Manager、Binder Driver,从图中我们可以看出四个对象的关系有些类似于互联网:Clinet-客户端,Server-服务端,ServiceManager-DNS,Binder Driver-路由器。

“Android系统Binder机制中的四个组件Client、Server、Service Manager和Binder驱动程序的关系如下图(引用自老罗的博客)所示:

        


从图中我们不难看出:

1. Client、Server和Service Manager实现在用户空间中,Binder驱动程序实现在内核空间中。

2. Binder驱动程序和Service Manager在Android平台中已经实现,开发者只需要在用户空间实现自己的Client和Server。

3. Binder驱动程序提供设备文件/dev/binder与用户空间交互,Client、Server和Service Manager通过open和ioctl文件操作函数与Binder驱动程序进行通信。

4. Client和Server之间的进程间通信通过Binder驱动程序间接实现。

5. Service Manager是一个守护进程,用来管理Server,并向Client提供查询Server接口的能力。

总结

看了好几篇文章看的还是有些晕,下面用一张图来简单总结一下自己对Binder的认识,如有问题,请大家指正。


参考文献

1、《Android开发艺术与探索》

2、Android进程间通信(IPC)机制Binder简要介绍和学习计划

3、深入理解Binder

4、简单明了,彻底地理解Binder


相关文章
|
12天前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
10天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
35 7
|
21天前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
45 10
|
29天前
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
89 7
|
29天前
|
IDE Java API
安卓应用开发入门:打造你的第一个"Hello World"
【9月更文挑战第11天】在探索安卓开发的海洋中,每个开发者的航行都从简单的"Hello World"开始。本文将作为你的航标,引导你驶向安卓应用开发的精彩世界。我们将一起启航,通过浅显易懂的语言和步骤,学习如何构建并运行你的第一个安卓应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供所需的知识和信心。准备好了吗?让我们揭开安卓开发的神秘面纱,一起创造些令人兴奋的东西吧!
|
1月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
5月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
2月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
93 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
2月前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
43 1
|
2月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
82 0