Android 中的AIDL 和 binder机制

2023-11-20

一,Binder

1,线程间通信Handler

Handler和Binder是Android通信的两大支柱,Handler是线程间通信的基础,一个App的运行一定是多个线程相互协作的过程,特别是Android子线程不能更新UI界面的限制使得线程间的通信机制Handler尤为重要。

 

2,进程间通信

 

2.1 初识Bindler

 

Android进程间的通信基于Binder机制,Binder并非linux系统标准的通信机制,Android系统选定Binder这种机制实现进程间通信基于以下几个考虑:

1,效率高。

     相对于低效的Socket,两次复制的管道,使用了内存映射的Binder效率高,只需一次复制,效率仅此次于共享内存。

2,稳定。

    Binder基于C/S架构,相对于共享内存的难以控制,Binder要稳定的多。

3,安全。

    通过binder机制,Android系统可以实现根据进程ID请求用户授权访问其他进程的方式提高安全性,比如一个app进程想要访问通讯录,通讯录本质也是一个进程,系统就会提示用户,用户决定是否向该进程授权,系统会保存用户的授权结果。

 

2.2 Binder构成

 

Binder是一种进程间通信的解决方案,由Client、Server、ServiceManager、Binder驱动构成。

当Client要调用Server的时候,并不能直接通过运用的方式使用Server的服务,而是通过位于Client端的Server服务代理,基于系统调用,调用内核空间的binder驱动,binder驱动通过ServiceManager找到Server,Server读取内存空间的数据,执行代码逻辑,将执行结果写入内存空间,通过内存映射反映到内核空间,binder将结果返回给Client。

 

2.3 AIDL使用思路

 

AIDL是基于Binder提供的Framework层的高效开发方式,一般有服务端定义,并通过Service组件对客户端提供服务。

客户端通过SeviceConnection连接服务端,服务端在接收到客户端的请求时(onBind)将服务端的IBinder实现返回给客户端,当然客户端并不能真正拿到这个对象的引用,而是通过内核空间极其复杂的逻辑转换,得到一个服务端的代理对象,客户端通过这个代理对象与服务端进行通信,客户端在onServiceConnected中获得这个代理对象的引用。

 

 

 

 

参考文献:

1,Android binder 原理

2,Binder原理之通俗易懂篇

3,非常棒的图解Binder原理,看总结就可以了

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中的AIDL 和 binder机制 的相关文章

  • 如何在android中实现触摸平滑图像橡皮擦?

    我已经从 API 演示中看到了finturePaint java 我想实现触摸平滑橡皮擦 通过在android中触摸移动来擦除部分图像 FingerPaint 告诉我要实现这个 mPaint setXfermode new PorterDu
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • Android短音的正确播放方法?

    我正在创建一个应用程序 屏幕上将有多个图像 这些图像将是按钮 点击时会播放短促的声音 我对此进行了研究 只能找到我当前用来播放声音的方法 这似乎根本没有响应 我希望声音能够快速播放并且能够响应多次快速点击 我不确定这在 Android 中是
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • Android 深度链接至 Instagram 应用

    Instagram 已经发布了 iOS 深层链接的 url 方案 但尚未为 Android 创建文档 有没有办法深入链接到 Android 上的 Instagram 应用程序 以转到 Instagram 应用程序中的特定位置 例如 Inst
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 从 BroadcastReceiver 类调用活动方法

    我知道我可以做一个内部接收器类来调用接收器中的任何方法 但我的主要活动太大了 要做的事情也很多 因此 我需要一个扩展广播接收器的类 但它不是内部类 并且可以从我的主要活动中调用一种方法 我不知道是否可能 但我的活动是家庭活动和 single
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Android 构建发布失败,原因为:java.lang.ArrayIndexOutOfBoundsException:213(pr​​oguard 问题)

    我的项目使用调试构建变体构建得很好 但使用发布变体 Android Studio 会抛出 引起原因 java lang ArrayIndexOutOfBoundsException 213 可能是什么问题 如果我设置minifyEnable
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 在 Android 应用程序资源中使用 JSON 文件

    假设我的应用程序的原始资源文件夹中有一个包含 JSON 内容的文件 我如何将其读入应用程序 以便我可以解析 JSON See 开放原始资源 http developer android com reference android conte
  • 如何使用 AccessibilityService 在 Android 中模拟按键

    我正在编写一个辅助服务 我一直在尝试在应用程序上进行一些自动搜索 我使用accessibilityservice action paste来填充EditText 然后我需要模拟软键盘上的按键 但我不知道如何做 你们能帮我一下吗 你可以尝试A

随机推荐

  • win10安装mujoco150 , mujoco_py1.50.1.68 , gym

    win10安装mujoco mujoco py gym 本文介绍的是在Win10系统下安装gym mujoco150 mujoco py1 50 1 68的具体流程 另外一篇是安装mujoco200和mujoco py2 0 2 9版本 方
  • 爬虫超简化详细流程

    第一章 爬取网页源代码 一 导入模块 使用pip命令模块在电脑终端 下载基础爬取所用模块 requests import requests 二 放置网址 单引号中放置网址 url 三 设置请求头 headers Accept 辨识内容为全部
  • am335x+wm8960音频基于linux 4.9.41移植

    1 配置内核驱动 gt Device Drivers gt Sound card support SOUND y
  • IMX6学习记录(7)-编译脚本

    上面是我的微信和QQ群 欢迎新朋友的加入 1 效果 这几天搞这个东西 会有一大堆的命令行操作 很多重复的内容 现在做一个简单的脚本 方便自己平时的开发工作 2 脚本内容 bin bash uboot编译 function mk uboot
  • Django form组件

    form组件博客整理一 背景 我们之前在HTML页面中利用form表单向后端提交数据时 都会写一些获取用户输入的标签并且用form标签把它们包起来 与此同时我们在好多场景下都需要对用户的输入做校验 比如校验用户是否输入 输入的长度和格式等正
  • IDEA找不到程序包 和 request.getServletContext()报错Cannot resolve method ‘getServletContext()的解决方法

    重新装了idea和down了项目却一直报错 在调用request getServletContext 的方法时一直报Cannot resolve method getServletContext 的错误 网上查了好多方法 大多数都是在说是s
  • ModuleNotFoundError: No module named ‘tensorflow.contrib‘

    代码错误 Traceback most recent call last File D PyCharm PythonProject DRL Networking master DRL Networking master IPDPS2020
  • Android4.0 SDK功能详解

    我在eoe的论坛找到的 就复制过来了 跟大家分享一下 Android 4 0 平台API等级 14 Android 4 0 是一次重要的平台发布版 为用户和应用程序开发者增加了大量的新特性 在下面我们将讨论的所有新特性和API中 因为它将
  • 【C++】C++11语法之右值引用

    文章目录 一 的扩展 initializer list的讲解 二 C 11一些小的更新 decltype nullptr 范围for 新容器 三 右值引用 右值真正的用法 完美转发 默认成员函数 总结 一 的扩展 在原先c 的基础上 C 1
  • 操作系统:进程学习笔记

    前言 程序顺序执行的三大特性 1 顺序性 指处理机严格按照程序所规定的的顺序执行 2 封闭性 指程序在封闭的环境运行即程序运行时独占全机资源 资源状态只能有本程序才能够改变它 程序一旦执行 其运行结果不受外界影响 3 可再现性 指只要程序执
  • 编写Shell脚本(批处理,一次执行多条命令)

    Bash终端的优势 1 上下键重复执行命令 2 tab键自动补齐 3 提供有用的环境变量 4 批处理 shell脚本文件建议以 sh为后缀 其实vim创建文本文件时 对名字无要求 但最好规定格式 echo SHELL 输出为 bin bas
  • grep的用法

    命令介绍 Linux系统中grep命令是一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹配的行打印出来 匹配到的标红grep全称是Global Regular Expression Print 表示全局正则表达式版本 它的使用权限
  • khv是什么虚拟服务器,服务器虚拟化vSphere4 vs Hyper-V R2,选择谁?

    目前在X86服务器平台上做虚拟化 是非常热的 目前主要有两个选择 VMWare的vSphere4和微软的Hyper V R2 VMWare非常成熟 企业级用户很多 但价格不便宜 按照CPU数量和版本收费 Hyper V R2很便宜 但出来的
  • 检查内存泄露

    自己编写的视频处理程序出现了一个问题 每帧的运行时间随着运行时间在不断增长 很大可能是出现了内存泄露 于是学习了一些查看内存泄露的方法 做了两种尝试 一是VS自带的DEBUG下的检测 view pl html view plain copy
  • Windows上让Qt5 QCamera响应UVC摄像头硬件按钮拍图

    QCamera相机类提供了一些基本的功能 包括拍照和录制功能 Windows上不支持录制视频 但也有很多接口是没有封装的 比如有些UVC摄像头有物理按键 可以进行拍图等操作 但是QCamera没法响应硬件按钮的拍图操作 网络上的相关代码都是
  • RC-u4 相对论大师(bfs求解指定路径)

    PTA 程序设计类实验辅助教学平台 题解 bfs可以求解从根节点到叶子节点的指定路径 这里的vis 不是为了防止访问到父节点 更多的是为了缩小路径长度 mpp和mp的映射也很巧妙 开始我用的还是map
  • [从零开始学习FPGA编程-38]:进阶篇 -语法-函数与任务

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 什么是函数Function 1 1 什么是函数 1 2 函
  • 【JAVA】输入:Scaner

    一 语法 1 导入 import java util Scanner 2 创建对象 Scanner scanner new Scanner System in 3 创建变量 int x scanner nextInt next系列 next
  • 服务器运维基础指南

    服务器运维基础指南 作为一个开发人员 对于服务器的操作不可避免 最常用的操作就是部署应用到服务器 及在生产 测试环境通过查看日志排查问题 一般服务器都是linux操作系统并且是无图形界面的 所以进行任何操作都是通过命令行 由于从新一代程序员
  • Android 中的AIDL 和 binder机制

    一 Binder 1 线程间通信Handler Handler和Binder是Android通信的两大支柱 Handler是线程间通信的基础 一个App的运行一定是多个线程相互协作的过程 特别是Android子线程不能更新UI界面的限制使得