AIDL初步了解

知道AIDL这个东西,android接口进程通讯语言,但是没有具体去看,google了一下,

初步了解了!记录,待以后后头看

  AIDL步骤:
         一般是服务端和客户端之间的进程通信。
1.分别新建两个android项目,一个为Service一个为Client


2.分别在两个项目中新建包,要求包名一致,然后在里面都创建
一个后缀为aidl的文件
   如:

      package com.zhb.aidl;  
      interface IPerson {  
      String talk(String someone);  
      }
3.在Service里面实现AIDL的方法

   

 public class AIDLService extends Service {

    private static final String TAG = "AIDLService";

    //实现AIDL里面的方法
    IPerson.Stub stub = new IPerson.Stub() {
        @Override
        public String talk(String someone) throws RemoteException {
            Log.i(TAG, "talk() called");
            return someone+"说";
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        Log.i(TAG, "onBind() called");
        return stub;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.i(TAG, "onUnbind() called");
        return true;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy() called");
    }
}
4.回到Client当中,一:就是绑定Service  二:与服务相连
 绑定服务就是
Intent intent = new Intent("android.intent.action.AIDLService");  
               bindService(intent, conn, Context.BIND_AUTO_CREATE); 
 
  与服务连接就是
private IPerson person;
               private ServiceConnection conn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onServiceDisconnected is called");
}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
Log.i(TAG, "onServiceConnected called");
person = IPerson.Stub.asInterface(service);
}
};


此时就拿到了person,就可以调用服务里实现的AIDL接口里的talk方法
person.talk("哈哈");

目前在项目中用的比较少,貌似面试会问到,记录之,推荐一个博客写AIDL写得详细

Android:学习AIDL,这一篇文章就够了(上)

嗯,就是这样子

猜你喜欢

转载自blog.csdn.net/qq_26617627/article/details/52958516