kiddsunhaibo1 发表于 2013-1-30 04:07:50

android aidl进程间方法的调用

android 进程的通信很多,可以用intent传递数据,可以实现数据的共享,可以通过aidl实现进程间的通信,一般如果进程间需求方法调用的时候就要实现aidl
这个说明一下aidl进程间的对象的传递。
我们先是申明一个aidl的接口的文件IWorkFlowPlugin.aidl在里面实现一个对象传递的方法,
interface IWorkFlowPlugin
{
   WorkFlowBean getWorkFlowBean();
}
声明一个WorkFlowBean的java的文件,实现Parcelable接口
public class WorkFlowBean implements Parcelable
{

    /**
   * Parcelable
   */
    public static final Parcelable.Creator<WorkFlowBean> CREATOR = new Creator<WorkFlowBean>()
    {

      @Override
      public WorkFlowBean createFromParcel(Parcel source)
      {
            WorkFlowBean workFlowBean = new WorkFlowBean();
//            workFlowBean.ecsSDK = (EcsSDKImpl)source.readSerializable();
            workFlowBean.ecsSDK = EcsSDKImpl.getInstance();
            return workFlowBean;
      }

      @Override
      public WorkFlowBean[] newArray(int size)
      {
            return new WorkFlowBean;
      }
    };
   
    private EcsSDKImpl ecsSDK;
   
    @Override
    public int describeContents()
    {
      return 0;
    }

    public EcsSDKImpl getEcsSDK()
    {
      return ecsSDK;
    }
   
    @Override
    public void writeToParcel(Parcel dest, int flags)
    {
//      dest.writeSerializable(EcsSDKImpl.getInstance());
    }

如果想实现对象的传递的时候,必须声明一个新的aidl文件和javaBean的类名一致的
WorkFlowBean.aidl 里面书写 parcelable WorkFlowBean;
实现一个service
public class WorkFlowService extends Service
{
   
    private class WorkFlowServiceImplextends IWorkFlowPlugin.Stub
    {
      @Override
      public WorkFlowBean getWorkFlowBean()
            throws RemoteException
      {
            return WorkFlowBean.CREATOR.createFromParcel(null);
      }
    }
   
    @Override
    public IBinder onBind(Intent intent)
    {
      return new WorkFlowServiceImpl();
    }
   
}

在其它的进程中实现一个ServiceConnection的连接类
private class MyServiceConnection implements ServiceConnection
    {

      @Override
      public void onServiceConnected(ComponentName name, IBinder service)
      {
            workFlowPlugin = IWorkFlowPlugin.Stub.asInterface(service);
      }

      @Override
      public void onServiceDisconnected(ComponentName name)
      {
            
      }
      
    }
页: [1]
查看完整版本: android aidl进程间方法的调用