5

我正在从我的 Android 应用程序调用 Web 服务。我在整个应用程序中对该服务进行了许多不同的调用,并且每个调用都在不到一秒的时间内返回数​​据,除了一个。即使实际的 Web 服务调用几乎是即时的,我的一个调用也可能需要一分钟才能返回数据。该行出现问题:

transport.call(SOAP_ACTION, soapEnvelope);

这被调用并且值几乎立即从 Web 服务返回。但可能需要一分钟才能到达下一行:

SoapObject result = (SoapObject) soapEnvelope.bodyIn;

Web 服务返回数据和应用程序点击下一行(上图)之间发生了什么?有没有办法减少这种延迟?有什么简单的检查吗?

4

2 回答 2

1

有没有办法减少这种延迟?有什么简单的检查吗?

唯一知道的方法是测量各个区域的时间差异。对于 SOAP Web 服务调用,这些是要衡量的时间。

客户端时间

客户端应用程序代码 -> 请求处理程序 -> 请求序列化 -> 请求调度 -> HTTP 传输 -> 服务器端

服务器端时间

接收 HTTP 请求 -> 反序列化 -> 应用程序代码 -> 响应处理程序 -> 序列化 -> 调度 -> HTTP 传输

阻塞通常出现在应用程序代码、处理程序和网络中。衡量这些,你可以找到时间花在哪里。

  • 要测量应用程序代码和处理程序占用的 CPU 时间,请使用分析器。我会推荐Jprofiler
  • 要测量网络时间,请 ping 目标服务器并使用类似Charles的 Web 调试代理。它可以告诉您请求在网络上花费的时间。
于 2013-03-25T10:40:07.157 回答
1

原来延迟只是在调试应用程序时。在没有附加调试器的情况下运行应用程序时,它会立即返回。

于 2013-03-27T13:50:16.237 回答