AIDL-- Android自定义接口语言
我们所说的跨进程大概有两种: 两个应用跨进程 , 一个应用多开了一个进程 . 这里我们先说一下两个应用间的通信.
可以跨进程的有Intent ,EventBus ,广播,ContentProvider ,Binder,这里我们用Intent 通信传值.
注意,两个应用必须是自己的, 要是QQ能和支付宝通信 那就乱了.
首先我们建两个工程,一个ADemo 用来发消息,BDemo 用来接消息.
首先我们需要在BDemo中新建一个Activity , 我取的名字是ReceiveAty ,在 AndroidManiFest中注册,到这里我们都和以往的操作一样 不过我们需要在注册里在写一些东西
如下
<activity android:name=".ReceiveAty"> <!--暴露出这个aty供外部访问--> <intent-filter> <!--给aty加个名字--> <action android:name="BDemo.com"/> <!--计划 声明我们的一个地址--> <data android:scheme="value"/> <!--启动方式 默认的--> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>名字是自己起的,由于我们需要用category和action ,所以我们不能使用MainActivity , 否则没有启动的activity ,应用无法启动
BDemo目前告一段落,我们开始写ADome
ADemo 中我们需要做的事情更少,我们只需要一个Intent 就可以打开BDemo并传值了 代码如下
//参数说明 //第一个参数就是我们要跳转的app的aty的名字 //第二个参数是一个地址 Intent intent=new Intent("BDemo.com", Uri.parse("value://123456789")); intent.putExtra("key","我的ADemo的值"); startActivity(intent);这段代码写在点击事件里就可以, Uri.parse() 中的参数构成 为 BDemo中注册时的计划名 +"://" +任意数字(数字多长都可以)
计划名我用的是value,实际用什么都可以只是这里必须与之前写的相同,以及必须有"://"
在BDemo中接收一下Intent就可以了
Intent intent=getIntent(); String data=intent.getStringExtra("key"); textView = (TextView) findViewById(R.id.tv); textView.setText(data);
这时候我们就可以实现一个简单的跨进程通信了,使用的是Intent.还没有用到AIDL.
下一篇用AIDL实现简单的一个应用的两个进程间通信