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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值