0

アプリで非同期にデータを取得する方法はいくつかあります。1つはaHandlerで、もう1つはAsyncTaskです。今、私は両方を使用しました、そしてどちらがいくつかのタスクでより良く/より効率的に実行するか知りたいです。

これまでのところ、私は主AsyncTasksにWebdataの取得に使用し、からへHandlerのデータの取得に使用しました。ServicesActivities

HandlerWebdataに'sを使用すること、またはからUIを更新するためにAsyncTasksを使用することに利点があるかどうかを知りたいですServices。大きな違いは何ですか?

4

2 に答える 2

4

AsyncTaskを使用しているHandlerので、比較は...奇妙です。

AsyncTaskトランザクション作業に最適です。数ミリ秒以上、数分未満かかるものです。この種の作業では、独自のスレッド管理が必要ない場合は、AsyncTask通常、使用する方が簡単です。

スレッドに必要な特定の特性があり、AsyncTask簡単に処理できない場合、またはスレッドが不確定な期間(たとえば、ユーザーが停止ボタンを押すまで)必要な場合は、独自のスレッドと他の何かを使用してください。メインアプリケーションスレッドに作業を開始します:、、、、Handlerまたは。「不確定な期間」の推奨事項は、組み込みのスレッドプールの1つを使用していることを前提としています。私は、設定していないスレッドプールからスレッドを結び付けるのが好きではありません。post()runOnUiThread()

于 2012-08-04T23:55:13.920 に答える
1

AsyncTask独自の内部ハンドラーを使用しているようです。私のテストでは、ハンドラーを使用した「投稿」がすぐにキューに入れられます。これで使用するonCreateと、他のアクションを後でキューに入れる必要があるため、問題が発生する可能性がありますonCreate(これに関するAndroidアクティビティなどのソースをまだ読んでいません)。そのため、後でレイアウトをロードするために投稿しようとしても機能しませんでした。を使用する必要がありましたAsyncTaskAsyncTask独自の内部ハンドラーがあるので; おそらく、タスクの作成はキューの直後に発生する可能性がありますonCreateが、doInBackgroundonPostExecuteは後でキューにあるため、後で発生する可能性があります。

したがって、このUIは、後で表示される可能性があるように、後で-後で意味AsyncTaskする非常に大きなレイアウトファイルをロードする必要があるため、より適切に機能しました。完了するまで表示されません。setContentViewonCreateProgressDialogProgressDialogonCreate

また、 AsyncTaskをいつ使用するかを選択する方法については、この記事を参照してください。基本的にUIを更新したいときに言います。ただし、実際にはこれを使用して実行できるrunOnUIThreadため、ハンドラーは必要ありません。またAsyncTask、Javaスレッドを既に知っている場合も同様です。runOnUIThreadSwingのinvoke/invokeLaterのものに似ています。

于 2012-10-25T14:29:21.673 に答える