android aidl --支持类型?同步还是异步?

一、作用

aidl用于android中进程间通信,远程服务端的接口方法在aidl中声明,当客户端 绑定服务器成功后返回的binder对象转成aidl支持的类型并调用之前声明的接口方法即可实现客户端与远程服务器的跨进程通信。

其实不提供aidl文件也可以实现Binder,之所以提供aidl文件,是为了方便系统为我们生成代码,我们也可以手动写一个Binder。

二、支持类型

aidl支持如下数据类型:

1、基本数据类型
2、String和CharSequence
3、ArrayList(里面的每个元素必须支持aidl)
4、HashMap(里面的每个元素必须支持aidl,包括key和value)
5、Parcelable

6、aidl本身

三、同步or异步

客户端调用远程服务是同步的,连接服务成功后执行远程服务方法是同步的,如果该客户端是UI线程就有可能因为服务端的耗时方法导致ANR。所以如果想要异步调用就新开个线程吧

private void bindKeyguardService() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                LogUtil.d("---bindFaceUnlokService start");
                Intent localIntent = new Intent();
                localIntent.setClassName(Const.KEYGUARD_PACKAGE, Const.KEYGUARD_CLASS);
                if (bindService(localIntent, mServiceConn, Context.BIND_AUTO_CREATE)) {
                    LogUtil.d("---bindFaceUnlockService success---");
                } else {
                    LogUtil.d("---bindFaceUnlokService failed---");
                }
                LogUtil.d("---bindFaceUnlokService end");
            }
        }).start();
    }

    private ServiceConnection mServiceConn = new ServiceConnection() {

        public void onServiceConnected(ComponentName paramAnonymousComponentName, IBinder binder) {
            LogUtil.v("*** FaceUnlock connected (yay!)");
            mService = IService.Stub.asInterface(binder);            
        }

        public void onServiceDisconnected(ComponentName paramAnonymousComponentName) {
            LogUtil.d("*** FaceUnlock onServiceDisconnected");
            mService = null;
        }
    };

log打印如下:

05-25 18:18:35.352 7944-7966: (FaceUnlockService.java:568)run->---bindFaceUnlokService start
05-25 18:18:35.359 7944-7966: (FaceUnlockService.java:572)run->---bindFaceUnlockService success---
    (FaceUnlockService.java:576)run->---bindFaceUnlokService end
05-25 18:18:35.428 7944-7944: (FaceUnlockService.java:584)onServiceConnected->*** FaceUnlock connected (yay!)


阅读更多
个人分类: android笔记
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

android aidl --支持类型?同步还是异步?

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭