深入分析AIDL原理】的更多相关文章

深入分析AIDL原理 分类: Android2011-11-18 17:29 6522人阅读 评论(1) 收藏 举报 descriptorcallbackservicenullinterfaceserver 在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例.但并没有深入分析aidl是怎样可以做到进程间通信的,它的执行过程是怎样的? 这篇文章来分析IRemoteService.aidl的执行过程,并理解aidl是怎样跨进程通信的. 当我们创…
还有一篇 讲解lock的实现原理,参考:解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团) 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药.但是,随着学习的进行我们知道在JDK1.5之前synchronized是一个重量级锁,相对于j.u.c.Lock,它会…
轉載自http://www.jianshu.com/p/ef86f682a8f9 -- 作者 谢恩铭 转载请注明出处 前言 为使应用程序之间能够彼此通信,Android提供了IPC (Inter Process Communication,进程间通信)的一种独特实现: AIDL (Android Interface Definition Language, Android接口定义语言). 网上有不少关于AIDL的文章,写得都很不错.不过例子构造大多略微复杂: 建立两个Android项目,一个是c…
季春初始,天气返暖,新冠渐去,正值学习好时机.在Android系统中,AIDL一直在Framework和应用层上扮演着很重要的角色,今日且将其原理简单分析.(文2020.03.30) 一.开篇介绍 1.简单介绍 Android系统中对原理的分析基本离不开对源码的阅读,我理解的原理分析: 原理分析 = 基本概念 + 源码分析 + 实践 正如创始人Linus Torvalds的名言:RTFSC(read the f**king source code).本文也是按照上述结构来介绍AIDL的. 接下来…
首先为什么需要aidl? 下面是不需要aidl 的binder的IPC通讯过程,表面上结构很简单,但是有个困难就是,客户端和服务端进行通讯,你得先将你的通讯请求转换成序列化的数据,然后调用transact()函数发送给服务端,而且还得制定一个小协议,参数谁先谁后,服务端和客户端都必须一致,否则就会出错.这样的过程有没有觉的很麻烦,如果有上百个接口,那可就要疯掉了.可不可以就像调用自家函数那样呢?而不需要麻烦的将参数值转化成序列化数据呢?由此AIDL诞生了. 好,我定义一下服务的函数,然后写成一个…
AIDLFramework层的架构,如下图: 换而言之,Android就是在传统的C/S架构中加入了一层,实现IPC.图中表明,AIDL类似COM的Proxy/Stub架构.不过是现在android自己的序列化类Pacel. 打个比方,你到自动取款机上去取款:你就是客户,取款机就是你的代理:你不会在乎钱具体放在那里,你只想看到足够或更多的钱从出口出来(这就是com的透明性).你同银行之间的操作完全是取款机代理实现.你的取款请求通过取款机,传到另一头,银行的服务器,他也没有必要知道你在哪儿取钱,他…
前言 记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药.但是,随着学习的进行我们知道在JDK1.5之前synchronized是一个重量级锁,相对于j.u.c.Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它. 不过,随着Javs SE 1.6对synchronized进行的各种优化后,synchroni…
AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通信原理,我们需要围绕以下两个问题来展开. 1.为什么需要AIDL? 我们都知道AIDL的目的是进行进程间通信.所以在了解AIDL原理之前先要了解一下什么叫进程间通信.进程间通信涉及到两个名词,一个是进程间,一个是通信.进程间就是两个或多个进程之间,所以这里先要明确一个概念,进程间通信涉及到多个实体.…
还有其他的锁,如果想要了解,参考:JAVA锁机制-可重入锁,可中断锁,公平锁,读写锁,自旋锁, 用synchronized实现ReentrantLock 美团面试题参考:使用synchronized 实现ReentrantLock(美团面试题目) 前几天去百度面试,面试官问多线程如何解决并发问题,感觉自己对lock的原理了解不够,这里对两种方式synchronized和lock做个系统的总结: 解决多线程的并发安全问题,java无非就是加锁,具体就是两个方法 (1) Synchronized(j…
(I)Java线程互斥原理之synchronized原理 从JDK5引入CAS原子操作,但没有对synchronized关键字做优化,而是增加了J.U.C.concurrent,concurrent包有更好的性能:从JDK6对synchronized的实现机制进行了较大调整,包括使用JDK5引进的CAS自旋之外,还增加了自适应的CAS自旋.锁消除.锁粗化.偏向锁.轻量级锁这些优化策略. 优化后的锁有四种状态:无锁状态.偏向锁状态.轻量级锁状态.重量级锁状态,每种锁是只能升级,不能降级,即由偏向锁…
近期有一个业务需求,多台机器需要同时从Mysql一个表里查询数据并做后续业务逻辑,为了防止多台机器同时拿到一样的数据,每台机器需要在获取时锁住获取数据的数据段,保证多台机器不拿到相同的数据. 我们Mysql的存储引擎是innodb,支持行锁.解决同时拿数据的方法有很多,为了更加简单,不增加其他表和服务的情况下,我们考虑采用select... for update的方式,这样X锁锁住查询的数据段,表里其他数据没有锁,其他业务逻辑还是可以操作. 这样一台服务器比如select .. for upda…
一.线程安全问题: 并发编程的原则:设计并发编程的目的是为了使程序获得更高的执行效率,但绝不能出现数据一致性(数据准确)问题,如果并发程序连最基本的执行结果准确性都无法保证,那并发编程就没有任何意义. 为什么会出现数据不正确: 如果一个资源(变量,对象,文件,数据库)可以同时被很多线程使用就会出现数据不一致问题,也就是我们说的线程安全问题.这样的资源被称为共享资源或临界区. 举个例子: 一个共享变量m,现在有两个线程同时对它进行累加操作,各执行10000次,那么我么期待的结果是20000,但实际…
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和plsql非常的熟悉.特别是sql里面的多表连接.子查询.各种新版本的函数,以及plsql里面的所有语法.建议大家拿出足够的时间来研究这两块.不要认为这是开发人员的工作,他也是DBA的重要工作,而且对DBA的要求更高,你不但能看懂,还要能够找出问题.学些这方面知识的要点就是:多练.多思考.2.Ora…
前言 移动研发火热不停,越来越多人开始学习android开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系和成长节奏感,特此编写一份android研发进阶之路,希望能对大家有所帮助. 这篇文章里,我们只谈技术,不谈软技能. 在这里我把攻城狮分成初级.中级.高级和资深四个阶段,分别对研发设计能力.工具使用.系统原理和架构等作出要求. 初级 我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成…
背景 在执行top/ps命令的时候,在COMMAND一列,我们会发现,有些进程名被[]括起来了,例如 PID PPID USER STAT VSZ %VSZ %CPU COMMAND 1542 928 root R 1064 2% 5% top 1 0 root S 1348 2% 0% /sbin/procd 928 1 root S 1060 2% 0% /bin/ash --login 115 2 root SW 0 0% 0% [kworker/u4:2] 6 2 root SW 0 0…
阿里的人问什么是锁膨胀,答不上来,回来做了总结: 关于锁的膨胀,synchronized的原理参考:深入分析Synchronized原理(阿里面试题) 首先说一下锁的优化策略. 1,自旋锁 自旋锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试.也就是不停循环看是否能等到上个线程自己释放锁.这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁.因为一般敏感的操作不会很多.当然这个是一个不能完全确定的情况,只能说总体上是一种优化. 举个例子就好比…
前言 移动研发火热不停,越来越多人开始学习android开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系和成长节奏感,特此编写一份android研发进阶之路,希望能对大家有所帮助. 这篇文章里,我们只谈技术,不谈软技能. 在这里我把攻城狮分成初级.中级.高级和资深四个阶段,分别对研发设计能力.工具使用.系统原理和架构等作出要求. 初级 我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成…
今天分享的是之前分享文章中被裁的小C,可以看这篇文<寒冬之下,被cai的那些人到底去哪了?>,最近他已经找到心仪公司今日头条Offer,并且即将入职,在应我要求下,他写了篇总结文如下.下文中的"我",不是鱼哥,是特指小C. 这两个月听的最多的两个词就是 寒冬 和 裁员,作为被裁大军中的一员,经历焦虑到担心,再到自信,最后到喜悦.焦虑的是那段被裁日子,不太好过,每天不敢下楼,就在房间里复习.也不敢告诉家里人.担心的是自己找不到工作,成为失业人员.自信是拿了几家二.三线厂off…
目录 synchronized简介 同步的原理 对象头与锁的实现 锁的优化与升级 Monitor Record 锁的对比 synchronized简介 synchronized关键字,一般称之为"同步锁"或者重量级锁(JAVA SE 1.6之后引入了偏向锁和轻量级锁).它具有可重入性. 根据锁的锁的"对象"不同可以分为对象锁和类锁: 对象锁: 对于普通的同步方法,锁的是当前实例的对象 对于同步方法块,如果synchronized括号里配置的是类的实例对象,则锁的是配…
前言 本故事纯属虚构,如有不通顺的逻辑请轻喷.️ <犬夜叉2021> 第一章:我还能找到你吗,阿篱 犬夜叉和奈落大决战之后,四魂之玉.食骨之井消失,谁也不知道去了哪,而犬夜叉和阿篱再次被分割到两个世界. 于是犬夜叉拜托一位研究世界宇宙的法师--积木,来帮助他找到阿篱. 时间转眼来到了2021年,积木终于发现了这个世界的秘密.. 其实我们所在的整个宇宙叫做Android宇宙,犬夜叉和阿篱所处的两个世界其实是两个进程,两个世界可以通过食骨之井相连接. 所以想让犬夜叉重新联系到阿篱,必须再找到当年的…
一位网友在职场论坛上发了一个帖子,他说自己今年三十七岁了,是一名Android老兵,因为和上家公司的领导闹矛盾有了嫌隙,一气之下就裸辞了,如今已经辞职四个月了,也失业了四个月. 每天都在努力投简历,共投出去了五百封简历,但只有三家通知自己过去面试,其他的都石沉大海.自己很纳闷,就找了一个做猎头的朋友询问,朋友说自己已经超龄了,没有什么岗位可以给自己这个年龄的人了,只有少数的能放宽到四十岁,但也不太适合自己做.所以自己没办法只好考事业单位了,没想到事业单位竟然也要求35岁,这可怎么办,自己还需要养…
深入分析 iBATIS 框架之系统架构与映射原理 iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 SQL 语句.本文主要介绍了 iBATIS 框架的体系结构和运行流程,以及 iBATIS 如何完成 SQL 语句的解析与 Java 对象与数据字段映射关系的建立,最后用一个实例说明了 iBATIS 是如何帮我们完成工作的. iBATIS…
引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”.可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值. 它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量. 术语定义 术语 英文单词 描述 共享变量   在多个线程之…
  通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized.如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度.Java语言规范对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量. 上面比较绕口,通俗点讲就是说一个变量如果用volat…
本文属于作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/ftf-java-volatile 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性".可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值.它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter…
初涉IPC,了解AIDL的工作原理及使用方法 今天来讲讲AIDL,这个神秘的AIDL,也是最近在学习的,看了某课大神的讲解写下的blog,希望结合自己的看法给各位同价通俗易懂的讲解 官方文档:http://developer.android.com/guide/components/aidl.html 一.What is AIDL?(什么是AIDL) AIDL:Android Interface Definition Language (Android接口定义语言) 首先,我们要知道,进程1和进…
AIDL使用以及IPC原理分析(进程间通信) 概要 为了大家能够更好的理解android的进程间通信原理,以下将会从以下几个方面讲解跨进程通讯信: 1. 必要了解的概念 2. 为什么要使用aidl进程间通信 3. 可能遇到的问题以及解决办法 4. aidl的使用,通过android提供的aidl实现一个进程间通信 5. 不使用aidl,手动编写Binder实现进程间通信 6. 分析aidl的原理,梳理andriod进程间通信相关知识 我们从Android对aidl文件自动生成的java类中可以看…
synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized.如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度.Java语言规范对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量. 上面比较绕口,通俗点讲就是说一个变量如果用volatile修饰了,则Java可…
说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如Camera开发过程中,可能需要设置一个初始化的相机配置,设置摄像头方向,闪光灯开闭,成像质量等等,这种场景下就可以使用建造者模式 装饰者模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.装饰者模式可以在不改变原有类结构的情况下曾强类的功能,比如Java中的Buff…
初涉IPC,了解AIDL的工作原理及用法 今天来讲讲AIDL.这个神奇的AIDL,也是近期在学习的,看了某课大神的解说写下的blog,希望结合自己的看法给各位同价通俗易懂的解说 官方文档:http://developer.android.com/guide/components/aidl.html 一.What is AIDL?(什么是AIDL) AIDL:Android Interface Definition Language (Android接口定义语言) 首先,我们要知道.进程1和进程2…