CSipIm断网重连崩溃原因分析

断网重连之后的操作流程

  拨打电话

->调用SipService.makeCallOptions(),先重启一遍SipService保证PjSipService的各参数正常,尤其是create参数置为true;再发送broadcast处理拨号信息

->SipService中的Receiver接收到broadcast,在内部用全局Handler接收SipRunnable执行底层拨号操作

原因分析

此时由于Handler从旧的MessagePool中获取到的消息赋值之后,SipService才执行完重启操作,而重启之后的MessagePool中重新置为0,(可参考SipService.SipServiceExecutor的countId参数);这样新发送的Message在handleMessage()中就无法获取到正常的Message,于是某些三星或小米手机认为消息队列异常报错!

原文地址:https://www.cnblogs.com/BobGo/p/7810175.html