AIDL的实例讲解

前言:
关于AIDL的介绍与原理不会在这里赘述。在这里通过一个简单“加法计算器”实例来告诉你AIDL到底是怎么用的。

正文:
1、在项目包中创建一个.aidl文件
这里写图片描述
2、在新建的.aidl文件中实现要做的逻辑方法。这里要做一个加法处理。

interface IAdditionService {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
     int add(int x,int y);
}

3、在包中新建一个类,让其继承Service。这里我们需要一个IBinder对象,这个对象代表了远程服务的实现,即数据的交流。我们通过前面做好的.aidl文件中的IAdditionService接口的子类IAdditionService.Stub,来实现add()方法,从而拿到处理后的数据。注意,不要忘记在AndroidManifest.xml中声明服务。

public class AdditionService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return myBinder;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }


    private final IAdditionService.Stub myBinder=new IAdditionService.Stub() {
        @Override
        public int add(int x, int y) throws RemoteException {
            return x+y;
        }
    };
}

4、在MainActivity中定义.aidl文件中的结果对象mIAdditionService,然后新建serviceConnection对象,监听服务连接状态。

private IAdditionService mIAdditionService;
private ServiceConnection serviceConnection=new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mIAdditionService=IAdditionService.Stub.asInterface(service);
            Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mIAdditionService=null;
            Toast.makeText(MainActivity.this, "Service disconnected", Toast.LENGTH_LONG).show();
        }
    };

5、在onCreate()中绑定服务

Intent intent=new Intent(MainActivity.this,AdditionService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);

6、通过以上操作就可以调用外部的服务进行数据处理了。

try {
    textView3.setText(mIAdditionService.add(x,y)+"");
} catch (RemoteException e) {
    e.printStackTrace();
}

7、不要忘记在onDestroy()解绑服务

unbindService(serviceConnection);
mIAdditionService = null;

实例下载地址:http://download.csdn.net/download/android_programmer/10024050

猜你喜欢

转载自blog.csdn.net/Android_Programmer/article/details/78202244