六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 101|回复: 0

android aidl进程间方法的调用

[复制链接]

升级  2.67%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
54
 楼主| 发表于 2013-1-30 04:07:50 | 显示全部楼层 |阅读模式
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)
        {
            
        }
        
    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表