【问题标题】:android network first request slow but following request much fasterandroid网络第一次请求很慢,但后续请求要快得多
【发布时间】:2015-03-06 06:26:54
【问题描述】:

我一直在开发 iphone 和 android 版本的应用程序。 我在 IIS 上使用 ASP.net web api 来服务我的网络请求。 在iphone上,所有的网络请求都如丝般顺滑,即使服务器闲置了一段时间,响应仍然很快。 另一方面,来自 Android 的网络请求(我选择 Volley 库)表现得非常不同。如果我在 Android 客户端上闲置一段时间(只有大约 30 秒),下一个请求会慢得多。但是一旦我开始第一个请求,所有后续请求(必须在 30 秒内发出)都与 iphone 对应部分一样快。

我使用 tcpdump 捕获了来自 Android 的请求并在 Wireshark 中打开。

抱歉不知道怎么放大图片,请在浏览器中放大...

快速请求:(在 30 秒内跟随第一个请求)

缓慢的请求(闲置超过30秒然后发出第一个请求):

注意慢请求在握手之前发送请求并且有很多重传。 有没有办法让我的 Volley 网络请求和 iphone 网络请求一样快,并且在空闲一段时间后不会变慢?真的很想弄清楚这一点,因为 android 上的缓慢可能需要超过 2 秒,这确实是一个糟糕的用户体验。

请任何人都可以帮助或至少给我一个方向?

【问题讨论】:

  • 您确定手机闲置时间过长没有断开wifi连接吗?
  • 我在同一设备上测试了其他使用互联网的应用程序,它的响应没有我的应用程序那么慢。我认为 wifi 不会断开连接。
  • 也许其他应用程序要求 wifi 连接保持活动状态?您能否从其他机器 ping 您的手机并验证它在执行问题中描述的测试时不会停止回复?
  • 我在使用 Jio 时遇到了同样的问题……你解决了吗?你能告诉我或发布答案吗?

标签: android iis asp.net-web-api wireshark android-volley


【解决方案1】:

我在某些手机中遇到了同样的问题,但我改变了:

Volley.newRequestQueue(getApplicationContext())

到:

Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024);
Network network = new BasicNetwork(new HurlStack());
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
Instantiate the RequestQueue with the cache and network.
mRequestQueue = new RequestQueue(cache, network);
mRequestQueue.start();

【讨论】:

  • 你能解释一下你做了什么吗?您“替换”: Volley.newRequestQueue(getApplicationContext()) 为: Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024);网络网络 = new BasicNetwork(new HurlStack()); mRequestQueue = Volley.newRequestQueue(getApplicationContext());使用缓存和网络实例化 RequestQueue。 mRequestQueue = new RequestQueue(缓存,网络); mRequestQueue.start();原来的那一行还在里面
【解决方案2】:

我确实遇到了同样的问题。我所做的是将DNS下的A记录,TTL从1800秒改为900秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2013-01-01
    • 1970-01-01
    • 2015-07-21
    • 2012-03-15
    相关资源
    最近更新 更多