okhttp3的异步请求是怎样回到主线程的

在源码中,异步请求最后是由 Dispatcher.enqueue()方法执行,里面传入了一个AsyncCall,实际上是一个runnable,这里使用了一个线程池来执行这个runnable,但是在回调的时候怎么切换到主线程?我没有翻到这部分源码,哪位大佬能帮忙找一下,感激不尽!!

阅读 8.8k
4 个回答

之前造过这类轮子,印象里主要是下面这点:

Handler h = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message message) {
        // TODO
    }
}

现在用 h 发消息,handleMessage 就处于主线程了。

不清楚 Okhttp3 是不是这样做的,你可以作为参考。

它没有切换到主线程啊。你自己用主线程的Handler把结果抛出来

enqueue执行的时候不是要传一个Callback responseCallback吗,你在哪里传的这个calback就是在什么线程执行Callback里面的代码

干脆用Retrofit
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题