11

Androidアプリでは、外部サーバーにデータを送信するためにURLに複数のGETリクエストを送信する必要があります(これがサードパーティAPIの仕組みです)。AndroidでHTTP GETリクエストを非同期で送信する最も良い方法は?

データが散発的に入ります。私はこのデータをキューに保存し、メインのUIスレッドを減速させることなく非同期にバックグラウンドでサーバーに送信したいと思っています。キュー内の各データ・ユニットには、GET要求が必要です。アプリが終了しても、キューを空にする必要があります。

これを行うにはどうすればよいですか?投稿/私にコード/チュートリアルを案内してください。

答えて

27

これを行うためのベストプラクティスは何ですか?:GETを作る

は同様に簡単ですか

「これ」とは何か、この作業がどこで行われているかによって異なります。

「これは」あなたは一つの形態または方法でスレッドを使用します、「非同期の仕事」である場合:

  • あなたのHTTP操作はUIを運転している場合は、更新できるように、あなたは、AsyncTaskを使用する場合がありますonPostExecute()

  • から安全にUIあなたのHTTP操作はバックグラウンドで純粋であり、一度に1をやりたい、独自のバックグラウンドスレッドと作業キュー

  • を持っているIntentServiceを、使用している場合

    お使いの場合は、私のWakefulIntentService

  • を検討し、あなたのHTTP操作は、バックグラウンドで、純粋で、あなたは一度に一つをしたい、とあなたはこのすべてが起こっている間、デバイスが起きなければならないことを確実にすることを懸念している場合HTTP操作はまったくバックグラウンドにありますが、一度にいくつかの操作を行いたいと思っている場合は、独自のスレッドプールでExecutorを使用するServiceをロールバックし、作業が完了したらそのサービスをシャットダウンするようにしますIntentService)、デバイスが起床したままになっていることを確認してください。WakeLock(おそらくはWifiLock

  • その他

"この" である "HTTP GET" 要求した場合、使用:

  • HttpUrlConnection、または

  • HttpClient、または

  • OkHttp(追加されたものをラッパメリット)、

  • Retrofit(あなたのGETリクエストが実際にWebサービス呼び出しの場合)、または

  • Volley(あなたがHTTPラッパーの文書化されていないことにするコード、サポートされていないが、Googlyが好きなら)

  • 他のサードパーティ製の任意の数ラッパー・ライブラリー

「これは」あなたが複数のスレッドが一度にそれに取り組むた上で計画している場合Queueクラス、またはLinkedBlockingQueueを使用し、「キュー」であるならば。

「これ」が何か他のものである場合、私は推測に飽き飽きしていますので、お手伝いできません。

+1

+1です。 ;-) –

+0

注:Volleyは現在推奨されているベストプラクティスであり、サポートされており、文書化されており、GET要求にのみ適用されるものではありません。 – Nilzor

+0

@Nilzor:「推奨されるベストプラクティス」 - これを示すhttp://developer.android.comのページへのリンクを提供してください。 「サポートされ、文書化されました」 - サポートが行われており、ドキュメントが保存されているサイト(例:GitHubリポジトリ)へのリンクを提供してください。 "GET要求にのみ適用されるのではない" - GET要求のための* only *であるとは決して言わなかった。 *質問*は 'GET'リクエストに関するものです。 – CommonsWare

8

AsyncTaskを使用して独自の非同期HTTP GETコールを行うことができますが、学習の観点からそれを行うのでない限り、それをお勧めします。すてきで清潔で安定したソリューションが必要な場合は、よく知られているAndroid Asynchronous Http Clientサードパーティのライブラリを使用することをお勧めします。サイトから:

"Android用の非同期コールバックベースのHttpクライアントは、ApacheのHttpClientライブラリの上に構築されています。すべてのリクエストは、アプリケーションのメインUIスレッド外で行われますが、コールバックロジックはコールバックはAndroidのHandlerメッセージパッシングを使用して作成されました。

AsyncHttpClient client = new AsyncHttpClient(); 
client.get("http://www.google.com", new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(String response) { 
     System.out.println(response); 
    } 
}); 
+0

アプリが終了するとどうなりますか? – ask

+0

現在の非同期要求が終了すると思いますが、実際はわかりません。 – britzl

+0

いい探しているライブラリ。 Gonaは私の新しいプロジェクトでそれを試してみましょう。便利なライブラリのためにありがとう – speedynomads

関連する問題