2011-08-22 4 views
20

アクティビティが開き、コンテンツを取得するためにREST HTTP APIを呼び出す必要があり、一度更新情報を受け取る典型的なシナリオを想像してみてください。明らかに、API呼び出しは別のスレッドで行う必要がありますが、AsyncTask、IntentService、または別の方法を使用して行う必要があります。なぜですか?IntentServiceまたはAsyncTaskからREST API呼び出しを行いますか?

答えて

12

this postに記載されているように、IntentServiceResultReceiverの組み合わせをお勧めします。

このモデルを実装しているGoogle ioschedもご覧ください。 2010年版では、onRetainNonConfigurationInstance,getLastNonConfigurationInstanceと静的クラスを使用して、構成の変更(つまり、画面の回転)を含めてResultReceiverを永続化する方法を示します。

私はアプリケーションでこのモデルを正常に実装しました。あなたが提供されたリンクに問題がある場合は私に教えてください。

編集:私は「なぜ」という質問忘れてしまった;)

AsyncTaskがtighly活動にバインドされているが、それがうまく設定変更を処理しません。活動の中で短い仕事(onResumeとの間)は大丈夫です。私はHttpClientを私のREST API呼び出しに使用しています。接続タイムアウトとソケットタイムアウトは20秒に設定されています(悪いモバイルネットワークのため...)。これは、APIコールが40秒続く可能性があることを意味します。あなたは間違いなく、AsyncTaskではなく、そのような長いタスクをサービスで処理したいと思っています。

+0

私は@hleroyに質問があります。そのため、オフラインで使用するためにSharedPreferenceを使用してローカルに保存する必要があるため、いつOnResume()、OnStart()、またはOnClickEventListener()を開始しますか。たとえば、Webサービス(私の場合はWCF Web API)を使用してサーバーからUIの200人の学生をリストする必要があります。この行をどこに置くのですか?//インテントサービスを実行する//インテントサービスを実行する//インテントdownloadIntent = newインテント(this.Context、typeof(StudentIntentService)); // this.Context.StartService(downloadIntent); ' –

関連する問題