3

Google Playアプリに似たアプリケーションに取り組んでいます(フラグメント内にグリッドビューがあるスワイプビューに加えて、グリッドビュー[画像+テキスト]のデータがリモートサーバーから取得されます)。

私の問題はバックグラウンドタスクにあります。インターネットからのデータの取得に何を使用するかを決めることができません。主に、AsyncTaskと手動スレッドのどちらを使用するかを決定しようとしています。もちろん、AsyncTaskを実装する方が簡単ですが、いくつかの調査の結果、多くの人がAsyncTaskを制限していることに気付きました。

私の特定のケースでは、インターネットからJsonオブジェクトとしてデータをダウンロードし、それらを解析して、グリッドビューにデータを表示したいと思います。グリッドビューには最大30個のアイテムがあり、各アイテムにはサムネイルと3つのテキストビューが含まれます。Androidのドキュメントでは、AsyncTaskは短い操作(最大で数秒)に適していると言われています。最大30個のアイテムを入力することは、短時間の操作と見なされますか?データを同時にフェッチしたい。また、API8以降のAndroidフォンをサポートしたいと思います。APIが異なれば、AsyncTaskの動作も(連続的または同時に)異なることを読みました。

私の質問は:私のアプリにAsyncTaskを使用するのは適切ですか?または、すべてを手動で行う必要がありますか?ThreadPoolExecutorはこれを行うための3番目の方法ですか?手ねじよりも簡単ですか?

アドバイスをいただければ幸いです。この問題を決定せずに実装を進めることはできません。

前もって感謝します!

4

3 に答える 3

0

私の理解では、短い操作にのみAsyncTasksを使用することについてのコメントは、長い操作が終了したときに同じビューが使用可能になることを期待しないことを目的としています。たとえば、ユーザーがアプリを離れて戻ってきた場合や、現在のアクティビティが何らかの理由でなくなった場合です。これを回避する一般的な方法は、サービスを使用してそこにプレーンな古いスレッドを起動し、操作が完了したときに現在のアクティビティを更新するように指示するメッセージを送信することです。

データのダウンロードと処理は、最も長い操作になる可能性があります。だから私はこれを短いか長いかの基礎として使用します。データの永続化をまったく気にせず、ユーザーが離れて戻ってきた場合にダウンロードを再開してもかまわない場合は、ほとんど考えずにAsyncTaskを使用できます。

GridViewを使用している場合は、一度に画面に表示される数をわずかに超えるのに十分なビューのみを入力する必要があります。

AsyncTaskは、メガバイトや数百キロバイトではなく、数キロバイトのデータであると仮定すると、状況に応じて問題ないと思います。データのメガ、私はスレッドを持つサービスに移動すると思います。何百ものkは、トスアップです。

また、ローダーを調べてください...この種のロードに適した代替案を確認したい場合。

于 2013-01-02T15:33:15.280 に答える
0

昨年ロンドンで開催されたDroidConに参加したとき、ネットワークからデータをロードするためにAsyncTasksを使用することが信頼できない理由に気づきました。

このプレゼンテーションは、RoboSpiceライブラリに関するものでした。

このサイトには、AsyncTasksが信頼できない理由と、RoboSpiceがこれらの問題を修正するために何をするかを説明する非常に優れたインフォグラフィックもあります。

免責事項:私はRoboSpiceとは一切関係がなく、試したこともありません。私は彼らのプレゼンテーションに感銘を受け、それが試してみる価値のあるツールであると確信しました。

于 2013-01-06T16:08:55.070 に答える
-1

友人、私は必要に応じてプロジェクトに取り組んでいます。API8以降をサポートするには、Asynctaskを使用して何かをダウンロードする必要があります。そうしないと、アプリを実行することさえできないため、API15以降でクラッシュします。短い操作でもAsyncTaskなし。

必要なことはほぼすべて実行し、上記のAPI 9で非常にうまく機能しているので、Asynctaskを使用する必要があります。SherlockActionbar、EndlessAdapter、ViewPagerをすべてAsyncTaskで実装しました。さらにサポートが必要な場合は、もう一度質問してください。後で。

于 2013-01-02T15:31:28.230 に答える