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[size];
}
};
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 WorkFlowServiceImpl extends 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)
{
}
}
这个说明一下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[size];
}
};
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 WorkFlowServiceImpl extends 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)
{
}
}