0

REST API経由でサーバーからデータを受信する小さなAndroidアプリケーションを実装しました。すべてのアクティビティには、サーバーから要求されたデータを取得する AsyncTask が含まれています。私は DefaultHttpClient を ThreadSafeConnManager と共に使用しており、クライアントはそれを再利用するためにシングルトンです。アプリをテストしてアクティビティを見ていくと、奇妙な問題があります。すべてがしばらく機能していて、突然データの受信に時間がかかります。アクティビティで戻るボタンをすばやく押すと発生します-クライアント接続が解放されておらず、新しいタスクが接続できない asynctask が原因であると思われます。しかし、HttpGet ごとに新しいクライアント インスタンスを作成すると、同じことが起こります。

私はこの問題に固執し、何が問題なのかわかりません。どんな助けでも感謝します。

ありがとう、ピーター

4

3 に答える 3

0

AsyncTasks は、特に長時間実行される操作では、ややこしくなります。リクエストを満たすためにいくつかのタスクを実行している可能性があります。プロセスのある時点で、クライアントがブロックすることに注意してください。

asyncTasks から離れて、リクエスト キューを備えたスレッド化されたサービスに移行することをお勧めします。asyncTasks を続行する場合は、キャンセルが適切に実装されていることを確認してください。

お役に立てれば

于 2012-04-14T15:27:09.280 に答える
0

これは、ネルソンが提案するのと同じページ内で、あなたのケースに適したアプローチです。

リクエストとスレッドエグゼキューターをもっと制御しようとします。Asynctask のプールは限られていることに注意してください。操作が十分に長い場合、リクエストはより大きくエンキューされます。

http://joseluisugia.wordpress.com/2012/08/03/using-runnables-queues-and-executors-to-perform-tasks-in-background-threads-in-android/

于 2012-08-06T21:18:06.517 に答える
0

この問題は議論されています:

Android HttpClient のパフォーマンス

  1. connectionMgr のデバッグ レベルのロギングをオンにし、ライフサイクル イベントを検査します。
  2. closeExpiredConnections() メソッドを見てください
  3. closeIdleConnections (長いアイドルタイムアウト、TimeUnit tunit)

connectionPool からの接続のライフサイクルをもう少し詳しく調べる必要があると思います。特に、アイドル状態で未使用の接続が閉じられているか、再利用されています。

ThreadSafeConnManager の API/ドキュメントを見るか、ソースを見ることができます。

于 2012-04-14T15:30:03.370 に答える