2016-06-22 4 views
0

Androidスタジオを使用して簡単なクライアントサーバーアプリケーションを実装しようとしています。メインのUIスレッドがネットワークコードを処理できず、スレッドがメインスレッドを参照できないというAndroidの制限を理解しました。Androidスレッドクラス

しかし、ネットワーク関連のコマンド(つまり、OutputStreamまたは/およびInputStreamを送信する)を実行する方法はわかりません。私は2つの一般的な質問があります。

  1. ワーカースレッド(Runnableなど)を使用するか、AsyncTaskを使用する必要がありますか?

  2. どちらが良いか、状況が良いですか?

おかげAsyncTaskdocumentationから

答えて

0

AsyncTaskを使用すると、UIスレッドを適切かつ簡単に使用できます。このクラス は、スレッドおよび/またはハンドラを操作することなく、 UIスレッドでバックグラウンド操作と結果の公開を可能にします。 非同期タスクは、 バックグラウンドスレッドで実行され、その結果がUIスレッドで公開される計算によって定義されます。

AsyncTaskは、以下の4つの段階を通過します:私が探していたまさに

onPreExecute() 

Invoked on the UI thread before the task is executed 

doInbackground(Params..) 

Invoked on the background thread immediately after onPreExecute() finishes executing. 

onProgressUpdate(Progress..) 

Invoked on the UI thread after a call to publishProgress(Progress...). 

onPostExecute(Result) 
0

最初に導入され、AsyncTasksが単一のバックグラウンドスレッド上で逐次実行されました。 DONUTから始めて、これはスレッドのプールに変更され、複数のタスクを並列に動作させることができました。 HONEYCOMBを開始すると、タスクは1つのスレッド上で実行され、並列実行によって発生する一般的なアプリケーションエラーを回避します。

AsyncTaskが現在同じバックグラウンドスレッドを再使用するかどうか(すなわち、それはサイズ1の固定されたスレッドプールを使用している場合)ビット曖昧です。それは、AsyncTaskソースを調べることで答えられる質問です。しかし、が今のところでなくても、それは将来可能かもしれません。 AsyncTaskを使用すると、コードは自動的に将来の変更と改善の恩恵を受けます。これだけでAsyncTaskを使用するのに十分な理由ですが、他の便利さは必要ありません。

+0

。どうもありがとう –

関連する問題