写这篇博文的主要目的是给大家普及下跨进程通讯的一些知识,也是为了加深自己的学习影响,写的不好望大家不要介意!
一跨进程通讯的难点?
这涉及到android系统的一些内存处理,它不允许不同内存空间的内存共享,对于进程和线程大家肯定也有了解,对与不同的应用android会单开进程并分配内存空间,而要达到不同应用间的通讯,我们势必要做一些特殊的处理。
二,跨进程通讯的应用场景?
相信解决这个问题,大家可以带着目的的去学习,这才是根本;下面是自己的一些理解,有错误欢迎指正:
首先,在我们不经意间其实经历了很多跨进程通讯的地方,如我们怎么利用intent打开别的应用,如:
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse(XXXXXXXX));
startActivity(intent);
其中intent的传递不就是跨进程么?再比如我们的广播,注册一个全局广播,可以接收到其他应用发过来的消息,这不是跨进程通讯么?还有我们的contentprovider,可以实现共享,不也是跨进程通讯么?其实学习中,我们很多强迫自己成为记忆的东西中,有很多去值得深究的。
三,AIDL的基本介绍
首先是应用场景,谈aidL的用处“方便啊,打个比方吧,如果新浪app将业务逻辑放在自己的服务中,再使用aidl将接口公开,那第三方开发者程在开发新浪微博时,最简单的方案就是直接启动新浪官方app中的服务,所有工作都交给新浪app,比整合sdk简单太多了。当然新浪并没有这么做,但是类似的app还是有的,比如google的自己的应用内购买,就是用aidl调用的google play中的服务,简化了开发工作” 这是抄录大神的一些话,是不是瞬间找到了方向;
aidL的基本应用相信大家都应该有所涉猎,创建.aidL文件,在服务端实现aidL.stub内部类,然后是一些简单的绑定,调用等操作,相信大家都会,但我想说的是aidL文件的作用,为什么要这么做?
第一,要实现跨进程通讯,我们得有一个统一的传输格式,android给我们提供一个轻量级的实现,Parcelable接口,至于怎么实现,网上很多讲解;
第二,当我们在创建aidL文件的时候,其实编辑器内部帮我们实现了Parcelable接口,在哪实现的呢?stub内部类,我们在stub里实现了aidL定义的接口,同时它帮我们隐藏实现了Parcelable,所以我们擦可以实现跨进程通讯,完成进程间数据传递
第三,附上学习时收集的大神的博客: