5

Android アプリケーションから Web サービスを呼び出しています。アプリケーション全体でこのサービスに対してさまざまな呼び出しがあり、1 つを除いて、すべての呼び出しが 1 秒以内にデータを返しています。実際の Web サービス呼び出しはほぼ瞬時に行われますが、私の呼び出しの 1 つは、データを返すのに最大 1 分かかることがあります。問題は次の行で発生します。

transport.call(SOAP_ACTION, soapEnvelope);

これが呼び出され、ほぼ瞬時に Web サービスから値が返されます。ただし、次の行に到達するまでに最大 1 分かかる場合があります。

SoapObject result = (SoapObject) soapEnvelope.bodyIn;

データを返す Web サービスと次の行 (上記) にヒットするアプリの間で何が起こっているのでしょうか? この遅延を減らす方法はありますか? 簡単にチェックできるものはありますか?

4

2 に答える 2

1

遅延は、アプリのデバッグ中のみであることが判明しました。デバッガーを接続せずにアプリを実行すると、ほぼ瞬時に戻ります。

于 2013-03-27T13:50:16.237 に答える
1

この遅延を減らす方法はありますか? 簡単にチェックできるものはありますか?

知る唯一の方法は、さまざまな地域で時間差を測定することです。SOAP Web サービス呼び出しの場合、これらは測定する時間です。

クライアント側の時間

クライアント アプリケーション コード -> リクエスト ハンドラー -> リクエストのシリアル化 -> リクエストのディスパッチ -> HTTP トランスポート -> サーバー側

サーバー側の時間

HTTP リクエストの受信 -> デシリアライゼーション -> アプリケーション コード -> レスポンス ハンドラ -> シリアライゼーション -> ディスパッチ -> HTTP トランスポート

ブロックは通常、アプリケーション コード、ハンドラー、およびネットワークにあります。それらを測定すると、どこに時間が費やされているかがわかります。

  • アプリケーション コードとハンドラーにかかる CPU 時間を測定するには、プロファイラーを使用します。Jprofilerをお勧めします。
  • ネットワーク時間を測定するには、ターゲット サーバーに ping を実行し、Charlesなどの Web デバッグ プロキシも使用します。リクエストがネットワーク上で費やした時間を知ることができます。
于 2013-03-25T10:40:07.157 に答える