小编最近研究了融云IM的demo,想学习的可以去下载看下 这里讲下比较关键的类
这个类里有个接口比较重要,mLibHandler,基本上连接及消息相关的方法都是这个接口中定义的
可以看到这个mLibHandler接口表面上的赋值是在服务连接成功的回调方法onServiceConnected中实现的,了解Service的原理的话(不懂得话可以去了解下绑定Service的用法),可以想到mLibHandler最终的赋值是在AidlConnection对象所绑定的服务中的onBind方法中实现的, 看下bindService方法的参数,其中Intent可以知道具体的Service,conn就是AidlConnection对象
bindService(@RequiresPermission Intent service, @NonNull ServiceConnection conn, @BindServiceFlags int flags)看下mAidlConnection赋值的地方 服务绑定的地方 即mLibHandler的最终实现是在RongService中的onBind方法内
RongIMClient中 IM连接服务器的方法 知道了mLibHandler的实现类是LibHandlerStub就好多了,可以看下这个类中的connect方法
最终连接IM服务的地方是 最终服务的连接是调用的native方法,无法往下跟了,就到这里。 可以看到融云IM中连接是用的一个普通的Service做的
2020年09月03日 21:06 ylxy