美文网首页
android之AIDL的基本使用

android之AIDL的基本使用

作者: 番茄焖西红柿 | 来源:发表于2020-05-05 14:55 被阅读0次

    AIDL的基本概念

    • aild定义:AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是Android开发中提供的一种快速实现binder的工具,而binder就是一种跨进程通信。
    • AIDL支持的基本类型:
      1.Java中的基本数据类型除了short类型,包括 byte,int,long,float,double,boolean,char
      2.CharSequence
      3.String 类型
      4.ArrayList,里面的每个元素也必须是AIDL所支持的类型
      5.HashMap,里面的每个key和value都必须是AIDL所支持的类型
      6.实现Parcelable的类

    案例解析

    1、定义AIDL文件

    IUser.aidl

    interface IUser{
        void  setName(String name);
        String  getName();
    }
    
    2、服务端实现接口
    public class MainProHandleRemoteService extends Service {
    
        private String name;
    
        private Binder binder=new IUser.Stub() {
            @Override
            public void setName(String s) throws RemoteException {
                name=s;
            }
    
            @Override
            public String getName() throws RemoteException {
                return name;
            }
        };
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            LogUtil.i("onBind");i
            return binder;
        }
    }
    
    3、客户端调用接口
    public class AIDLClientAcitvity extends Activity {
        //....
        private IUser mIUser;
    
        /*
         *bindService获取binder后,就可以提供调用相应的方法
         */
        private void bindServiceByAidl() {
            Intent intent = new Intent(this, AIDLService.class);
            bindService(intent, new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
                    LogUtil.i(TAG,"onServiceConnected");
                    mIUser= IUser.Stub.asInterface(service);
                }
    
                @Overridei
                public void onServiceDisconnected(ComponentName name) {
                    LogUtil.i(TAG,"onServiceDisconnected");
                }
            }, BIND_AUTO_CREATE);
        }
    }
    

    总结

    Binder.png

    每一个进程都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭小的空间里过完自己的一生。而aidl就类似与两个进程之间的桥梁,使得两个进程之间可以进行数据的传输。

    相关文章

      网友评论

          本文标题:android之AIDL的基本使用

          本文链接:https://www.haomeiwen.com/subject/izcpghtx.html