Android 进程之间不能共享内存,但是实现进程之间通讯的方法有很多,Activity、Broadcast,ContentProvider,SharedId都可以。作为android四大组件的Service 也有自己的方法实现进程之间的通讯--AIDL
流程:
服务端:
(1)新建扩展名为aidl的文件。内容与java语言类似 但是也有区别
package com.my;
interface IService
{
String getString();
}
(2)如果aidl文件创建正确,ADT会自动给你生成一个java文件,内容定义的是一个接口。
(3)编写一个继承自android.app.Service 的服务类,并编写类实现第二步的接口
public class MyService extends Service {
public class ServiceImpl extends IService.Stub
{
@Override
public String getString() throws RemoteException {
// TODO Auto-generated method stub
return "哈哈哈";
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return new ServiceImpl();
}
}
(4)在AndroidManifest.xml中配置
<service android:name=".MyService">
<intent-filter>
<action android:name="com.my.IService"></action>
</intent-filter>
</service>
调用端:
(1)将服务端第(2)步的java接口文件和包一起服务到调用端
(2)绑定服务,通过bindService(Intent intent,ServiceConnection connection,int flags);
(3)由第二步的方法知道要实现ServiceConnection 接口,并在接口的方法onServiceConnected()中得到第一步接口的实例对象
class MyServiceConnection implements ServiceConnection
{
//服务连接成功调用
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
//得到从服务端复制的java接口的实例对象,service 为接口的实例对象
service = IService.Stub.asInterface(arg1);
}
//服务连接失败调用
@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
}
}
(4)得到数据:通过调用第(1)步得到的接口方法
service.getString();