首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

android 经过AIDL实现跨进程访问

2012-09-28 
android 通过AIDL实现跨进程访问Android 进程之间不能共享内存,但是实现进程之间通讯的方法有很多,Activit

android 通过AIDL实现跨进程访问

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();

?

热点排行