Android中实现不同应用进程间通讯

本文欢迎转载,以下为本人亲测,如有问题请留言,转载请注明:http://blog.csdn.net/wqmain/article/details/18264245


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 抽象类的内部类并实现抽象方法,如:

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中注册上面定义的服务
<!--  注册服务 --> 
<service android:name="包路径.XxxService" >
   <intent-filter>  
       <!--  指定调用AIDL服务的ID  -->  
       <action android:name="包路径.IXxxService"  />  
   </intent-filter>  
</service> 

二、客户端
1、将服务端中自动生成的IXxxService.java文件拷贝到客户端工程,注意:文件所在包路径必须和服务端完全一致。
2、服务可以封装成帮助类调用,也可以直接在Activity中调用,后者如:
// 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 不能定义为单例的,否则无法调用


写的比较简单,当做技术资料备份吧......

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值