为什么 okhttp3 在 android 上执行请求比台式计算机慢?

Why is okhttp3 on android slower doing requests than a desktop computer?

我开始 caveman 分析网络请求代码,发现一些应该大约 3 秒的 API 却用了大约 8 秒。在分散了很多 println() 之后,我到达了介于:

之间的地步
mOkHttpClient.newCall(request).enqueue(okcallback);

public void onResponse(Call call, okhttp3.Response response) {
    System.out.println("GGGN in 1");

中间经过了 7 秒,表明 okhttp3 是罪魁祸首。在阅读了一些其他答案后,我偶然发现了 Events wiki page,其中包含一个 EventListener 示例,用于调试 http 管道中的事件。这是输出:

18:36:54.389 GGGH 0007 https://someurl/
18:36:54.390 GGGH 0007 0,000 callStart
18:36:54.390 GGGN 5
18:36:54.392 GGGH 0007 0,002 connectionAcquired
18:36:54.392 GGGH 0007 0,002 requestHeadersStart
18:36:54.392 GGGH 0007 0,003 requestHeadersEnd
18:36:54.392 GGGH 0007 0,003 requestBodyStart
18:36:54.393 GGGH 0007 0,003 requestBodyEnd
18:36:54.393 GGGH 0007 0,003 responseHeadersStart
18:37:01.680 GGGH 0007 7,291 responseHeadersEnd
18:37:01.681 GGGH 0007 7,291 responseBodyStart
18:37:01.682 GGGN in 1
18:37:01.682 GGGN in 2
18:37:01.683 GGGN in 3
18:37:01.683 GGGQuery 2
18:37:01.688 GGGQuery 3
18:37:01.689 GGGN in 4
18:37:01.689 GGG callback 4
18:37:01.690 GGG callback 5
18:37:01.715 GGG callback 6
18:37:01.715 GGGH 0007 7,325 responseBodyEnd
18:37:01.715 GGGH 0007 7,326 connectionReleased
18:37:01.715 GGGH 0007 7,326 callEnd

客户端似乎在 responseHeadersStartresponseHeadersEnd 之间花费了大约 7s。但是,当我 运行 来自同一网络上的 mac 的相同查询时,我得到 2.03 秒的请求。

为什么差别这么大,我可以做些什么让移动速度更快吗?我尝试了 other questions like this 的建议,但我已经做了那里提到的所有事情。

我在低端的小米 Redmi3S 上尝试过这个,但后来我在更快的小米 Mi6 上重复了测试,具有讽刺意味的是,那里的测试速度慢了 运行s 1s! Mobile APK 是使用混淆器在发布模式下编译的,因此我构建 运行,然后使用 grep 获取日志以避免对设备造成任何减速。 OkHttp3 版本为 3.12.1。有什么想法吗?

原来问题出在 header 上。在计算机上完成的请求与客户端上的请求略有不同。复制所有 header 字段可在 PC 和移动设备上提供相同的性能。