OkHttpClient疑虑之execute()与enqueue()同步与异步请求

       今天试着像鸿洋_一样想封装一下OkHttpClient,但是鸿洋_在封装的源码中却没有开启新线程,难道所有都是在主线程中直接操作,让我好迷惑。于是尝试去Log一下线程,发现execute()直接报错,不能在UI线程执行网络操作。而enqueue()没有报错,Log出来其在线程:OkHttp http://f2.topit.me/2/56/cd/1177415867363cd562l.jpg后面的是请求地址url。没办法,自己看源码也没找出究竟,只好去泡网看看了OkHttp的源码解析http://www.jcodecraeer.co西/anzhuokaifa/androidkaifa/2015/0326/2643.html。分析了一下各个类的作用,找到了对我最重要的东西

Dispatcher.java
Policy on when async requests are executed.

Each dispatcher uses an ExecutorService to run calls internally. If you supply your own executor, it should be able to run configured maximum number of calls concurrently.

原来在执行异步任务的时候开了一个线程池。

这个问题的发生也是自己没有完全理解到同步与异步的含义。

进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

而这里是把异步任务放在线程池中。run()得到respond后callback。

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