android进程间通讯方式有哪些

 我来答
huanglenzhi
2015-07-14 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517181
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
Android中实现不同应用进程间通讯,需要用到AIDL技术,以下为AIDL服务端和客户端实现步骤:

一、服务端:
1、在AndroidManifest.xml中定义的包路径下新建一个文件,扩展名为.aidl(如:IXxxService.aidl),系统会在gen中自动生成对应的.java文件(如:IXxxService.java)
2、在aidl文件中编写接口方法,语法同java区别不大。注意:方法参数支持java基本类型(int、long、boolean等)和(String、List、Map、CharSequence)
其它复杂类型需要自定义(实现Parcelable.Creator接口及其方法)。
3、在包路径新建一个继承 android.app.Service 的服务类,在该类中定义继承 IXxxService.Stub 抽象类的内部类并实现抽象方法,如:

[java] view plaincopyprint?

public class XxxService extends Service {
public class XxxServiceImpl extends IXxxService.Stub {
//implements methods
...

}

@Override
public IBinder onBind(Intent intent) {
XxxServiceImpl impl = new XxxServiceImpl();
return impl; //必须返回 XxxServiceImpl 的实例
}
}

4、在AndroidManifest.xml中注册上面定义的服务

[java] view plaincopyprint?

<!-- 注册服务 -->
<service android:name="包路径.XxxService" >
<intent-filter>
<!-- 指定调用AIDL服务的ID -->
<action android:name="包路径.IXxxService" />
</intent-filter>
</service>

二、客户端
1、将服务端中自动生成的IXxxService.java文件拷贝到客户端工程,注意:文件所在包路径必须和服务端完全一致。
2、服务可以封装成帮助类调用,也可以直接在Activity中调用,后者如:

[java] view plaincopyprint?

// Activity 中声明服务接口变量
private IXxxService serviceInterface;

// Activity onCreate()方法中创建ServiceConnection对象,并初始化serviceInterface
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 获得AIDL服务对象
serviceInterface = IXxxService.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {
}
};

// 绑定服务,AIDL_SERVICE_ID 为 "一、服务端 4、" 中提到的“指定调用AIDL服务的ID”
bindService(new Intent(AIDL_SERVICE_ID), serviceConnection, Context.BIND_AUTO_CREATE);

注意:在Activity 的 onDestory 方法中调用解除绑定服务的方法:unbindService(serviceConnection);

3、在按钮点击等事件中就可以调用服务中定义的方法了,如:serviceInterface.xxxMethod();

注意:服务端 XxxService 不能定义为单例的,否则无法调用
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式