aidl

Android开发的艺术探索第二章

百般思念 提交于 2020-01-04 14:21:08
IPC机制 2.1 Android IPC简介 IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指 两个进程之间进行数据交换的过程。 IPC不是Android中所独有的,任何一个操作系统都需要有相应的IPC机制,比如 Windows上可以通过剪贴板、管道和邮槽等来进行进程间通信;Linux上可以通过命名管 道、共享内容、信号量等来进行进程间通信。可以看到不同的操作系统平台有着不同的进 程间通信方式,对于Android来说,它是一种基于Linux内核的移动操作系统,它的进程间 通信方式并不能完全继承自Linux,相反,它有自己的进程间通信方式。在Android中最有 特色的进程间通信方式就是Binder了,通过Binder可以轻松地实现进程间通信。除了 Binder,Android还支持Socket,通过Socket也可以实现任意两个终端之间的通信,当然同 一个设备上的两个进程通过Socket通信自然也是可以的。 2.2 Android中的多进程模式 通过给四 大组件指定android:process属性,我们可以轻易地开启多进程模式,这看起来很简单,但 是实际使用过程中却暗藏杀机,多进程远远没有我们想的那么简单,有时候我们通过多进 程得到的好处甚至都不足以弥补使用多进程所带来的代码层面的负面影响。 2.2.1 开启多进程模式

ITelephony.aidl not compiling in eclipse

江枫思渺然 提交于 2020-01-04 05:11:28
问题 I am using the code of this answer, where as I have to add ITelephony.aidl to my project source, I did that. But this aidl file not compiling. Is there any other step which are required? 回答1: First create a package in the src folder in your project named com.android.internal.telephony and within that package create a file and copy paste the interface ITelephony and save the file as ITelephony.aidl. When you compile you will get the .java file for the ITelephony in the gen folder.This is what

Failed to run com.android.ide.eclipse.adt.internal.build.AidlProcessor

不打扰是莪最后的温柔 提交于 2020-01-04 04:25:12
问题 I got a project from a developer which is already completed and working fine for him on his computer. When I try to build that project on my computer in eclipse, then I am getting following error message: Failed to run com.android.ide.eclipse.adt.internal.build.AidlProcessor. Developer is using AIDL files into the project and I think my eclipse is not able to run those file... I searched lot about this on internet but did not get any help. Please let me if someone have any idea about this

Android跨进程通信篇

女生的网名这么多〃 提交于 2020-01-03 05:17:12
前言 转载请声明,转自【https://www.cnblogs.com/andy-songwei/p/10256379.html】,谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一。Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Android开发高级工程师必须要跨过的一道坎。但是,我们是否真的清楚,Android中都有哪些方式实现跨进程通信呢?这些方式都有哪些优缺点?如何选择这些通信方式?Binder是什么?为什么要引入Binder?Binder是这么样实现跨进程通信的?AIDL是什么?AIDL和Binder又有什么关系呢?...... 本文将对Android的跨进程通、进程内通信等方面做一些总结,以及比较详细地介绍AIDL的使用,主要内容如下: 其行文脉络大致如下,希望能加深读者对这方面内容的记忆:(1)Android基于Linux系统,所以先说系统进程相关知识和Linux IPC。(2)总结Android的IPC,顺带总结了Android进程内组件之间的通信方式。(3)Android为了克服Linux IPC中的缺点,引入了Binder,所以对Binder做了一些宏观上的介绍。(4)AIDL是实现Binder最常用的工具,所以详细介绍了AIDL相关内容。 一、基础知识简介

都说衣不如新人不如故,技术是学新不学旧的?IPC+view+Handler+线程。

吃可爱长大的小学妹 提交于 2020-01-03 04:06:20
刚刚过去2019,新的一年2020年。都说衣不如新人不如故,技术是学新不学旧的?可是旧的知识不巩固,根基不固很容易在面试或者实战遇到很大的问题的 以下知识点PDF版后续可见 更多面试内容等等 更多完整项目下载。未完待续。源码。图文知识后续上传github。 可以点击 关于我 联系我获取 https://github.com/xiangjiana/Android-MS 一丶线程篇 1、线程池的好处? 四种线程池的使用场景,线程池的几个参数的理解? 参考答案 : 使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或则“过度切换”的问题,归纳总结就是 重用存在的线程,减少对象创建、消亡的开销,性能佳。 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞 提供定时执行、定期执行、单线程、并发数控制等功能。 Android 中的线程池都是直接或间接通过配置 ThreadPoolExecutor 来实现不同特性的线程池.Android 中最常见的类具有不同特性的线程池分别为: newCachedThreadPool : 只有非核心线程,最大线程数非常大,所有线程都活动时会为新任务创建新线程,否则会利用空闲线程 ( 60s 空闲时间,过了就会被回收,所以线程池中有

都说衣不如新人不如故,技术是学新不学旧的?IPC+view+Handler+线程。

梦想与她 提交于 2020-01-02 22:30:36
刚刚过去2019,新的一年2020年。都说衣不如新人不如故,技术是学新不学旧的?可是旧的知识不巩固,根基不固很容易在面试或者实战遇到很大的问题的 以下知识点PDF版后续可见 更多面试内容等等 (更多完整项目下载。未完待续。源码。图文知识后续上传github。) ( VX:mm14525201314 ) https://github.com/xiangjiana/Android-MS 一丶线程篇 1、线程池的好处? 四种线程池的使用场景,线程池的几个参数的理解? 参考答案 : 使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或则“过度切换”的问题,归纳总结就是 重用存在的线程,减少对象创建、消亡的开销,性能佳。 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞 提供定时执行、定期执行、单线程、并发数控制等功能。 Android 中的线程池都是直接或间接通过配置 ThreadPoolExecutor 来实现不同特性的线程池.Android 中最常见的类具有不同特性的线程池分别为: newCachedThreadPool : 只有非核心线程,最大线程数非常大,所有线程都活动时会为新任务创建新线程,否则会利用空闲线程 ( 60s 空闲时间,过了就会被回收

How to debug remote AIDL service in Android?

点点圈 提交于 2020-01-02 07:13:12
问题 I have sources of a remote service which is using AIDL. Also I have my own app that connects to that service. I debug two apps simultaneously, but inside the remote service I can hit breakpoints only in generated AIDL file (stub and proxy), but I can't hit the real methods of the remote service. What can be the reason? Maybe I'm doing something wrong? Thanks! 回答1: It's a while since I tried this, but from memory I think what I did was : I set the breakpoints in the source, started the app

android之Service之Binder学习

情到浓时终转凉″ 提交于 2019-12-30 22:03:25
一、Binder框架 Binder用于完成进程间通信(IPC),比如普通应用程可以调用音乐服务,它工作在内核态,属于一个驱动,只是这个驱动要用的“硬件”是内存。 Binder架构由三个模块构成:服务端接口,Binder驱动,客户端接口。我们分开来看: 服务端 一个Binber服务端实际上是一个Binder类的对象,且一旦创建,内部就启动一个隐藏线程,用来接收Binder驱动发送的消息,收到消息后,会执行Binder对象中的onTransact()方法,并执照不同的参数执行不同的服务代码,所以实现一个Binder对象一定要重载onTransact()方法,onTransact()方法的参数来自于客户端调用transact()方法时的输入,两者的格式和顺序一定要一样。 Binder驱动 当服务端Binder对象创建时,同时会在Binder驱动中创建一个mRemote对象(这里不会再有新的线程),mRemote也是Binder类。当客户端访问远程服务时,是通过 mRemote对象 。 客户端 要访问服务端,先得到远程对象对应的mRemote对象,然后就可以调用其transact()方法,而在Binder驱动中,mRemote对象也重载了transact()方法,重载的内容重要是: 1.以线程间通信的模式,向服务端发送客户端传递过来的参数。 2.挂起当前线程(客户端线程)

Android IPC之AIDL

泪湿孤枕 提交于 2019-12-30 21:48:06
首先说一下Android进程间的集中通信方式 1.使用Bundle ----> 用于android四大组件间的进程间通信 2.使用文件共享 ---->用于单线程读写 3.使用Messenger ---->用于可存放在message中的数据的传递 4.AIDL android 接口定义语言 ---->主要用于调用远程服务的方法的情况 还可以注册接口 本文大致说一下第四种方式 AIDL,废话不多说了,直接上代码 先看一下host的目录结构: IMyAidlInterface.aidl 是默认新建的AIDL文件,之后我会在里面增加部分代码,新建AIDL文件方法如下( 切记,新建aidl文件后记得make project一下,as会给我们默认生成很多aidl对应的java代码 !): 我们打开IMyAidlInterface 我们就以上代码稍作简介: 1.basciTypes 是创建aidl默认的生成的代码, 展示给我们一些默认支持的数据类型 2.getName() 返回一个默认支持类型 String,不需要做额外处理 3.getPerson() 自定义返回类型 如果我们返回一个基础类型,不需要做额外的处理,创建目录结构中的 MyService, 重构其中的方法,getName直接返回一个简单的String 最后在mainfest 添加service的相关配置: 然后我们新建

Android进程间通信

試著忘記壹切 提交于 2019-12-29 22:44:30
##Android 进程间通信 在Android开发中线程是CPU调度的最小单元,进程是指一个执行单元,一个进程最少包括一个线程,也就是UI线程。当然也可以有多个线程 因为每个进程都会分配一个虚拟机,而每个虚拟机都对应着不同的内训单元,所以一些传统的通信方式就失去了效果,比如我们定义了一个静态变量a = 0,在A进程赋值a = 1,在b线程中查看还是为0.所以进程间通讯才区别于不同于畅通方式,成为一套体系。 为什么使用多进程? 1、单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的硬件的提升和android系统的改进,虽然可分配内存越来越多,但仍旧可以通过开启多进程来获取更多的内存来处理自己App的业务 2、独立运行的组件,比如个推,它的服务会另开一个进程。 3进行一些“不可告人”的操作的处理,比如双守护进程,来尽力使自己的应用不被系统杀死,或者获取用户的个人信息等其他信息。 进程间通信所要涉及知识点总结: 1序列化 2Binder 3多种进程通信的详细使用方式 4通信方式的选择 第一部分:序列化 进程间通信需要对传输的对象进行序列化的操作,当然像基础类型还有String为例外List ,MapMessage 等都是已经实现了序列化接口。 (1)implements Serializable java提供的接口