11

非同期タスクに対するローダーの利点はありますか? また、ローダーを Android froyo を搭載した携帯電話に対応させる方法。

編集:

ここでの主な問題は、ネイティブ DB (SqlLite) を使用していないことです。開発サーバーでDBを使用。当然、もう使えませんCursorLoaderAsyncTaskLoaderには例がまったくありません。あればリンクお願いします。

必要なデータをローカル DB にロードし、それを使用してクエリを実行することをお勧めしますCursorLoaderか?

4

6 に答える 6

10

はい、ローダーは、AsyncTask が不足している多くのことを無残に処理するため、AsyncTask よりも有利です。

  1. AsyncTask では画面の向きの変更は困難です。構成が変更されている間、保持していたActivity Controlクラスを使用するまで、私はこのような問題を抱えていました。方法を知りたい場合は、いくつかのコードを提供できます。ただし、データ全体が読み込まれる前であっても、方向を複数回変更すると、アプリがクラッシュしていました。ここでの秘訣は、最初のスレッドで大量のデータをロードせず、できるだけ早くスレッド化タスクを終了することです。バックグラウンドで発生したとしても、Android のスレッドの扱い方はお粗末です。タスクの 1 つがいつ強制終了されるかはわかりません。

  2. AsyncTaskLoader を使用する場合でも、必ずアクティビティ マネージャーを使用してください。これにより、Activites と AsyncTask をより細かく制御できます。

はい、すべての古いバージョンの Android と互換性があります。サポート ライブラリを含める必要があります (ほとんどの場合、これはデフォルトで含まれていますが、再確認することをお勧めします)。

于 2012-03-31T16:56:27.297 に答える
1

ローダーの欠点については誰も話していないようです! 現在、バックグラウンドで他のサービスを実行するシステムに取り組んでいます。

私が気付いたのは、ローダーのある画面が再開されるとすぐにということです。ローダーが使用するカーソルは、DB をロックします。

ほとんどの人には開かれていないかもしれませんが、sqlite の getDatabaseWriter は実際には同期メソッドであるため、ローダーが使用するカーソルは、ローダーがリセットまたは終了されるまで閉じられず、DB へのアクセスがロックされます。

このような状況でローダーを使用することはお勧めできません。また、結果セットが静的で決して変化しないように見える 100 個未満のアイテムで構成される場合にローダーを使用することもお勧めできません。

于 2014-01-28T12:02:16.610 に答える
1

1 つには、ローダーはコーディングが簡単です (ほとんどフラグメントに組み込まれています)。ローダー (具体的には CursorLoader) もカーソルを処理します (非推奨の manageQuery など)。

ハニカム前のローダーの使用方法については、このリンクを参照してください。

于 2012-01-31T10:46:30.623 に答える
1

以前は AsyncTasks を使用して「手動で」実行する必要があった多くのライフサイクル管理の実装と処理が簡単になりました。詳細については、この質問への回答を参照してください。

Froyo での使用に関しては、互換性ライブラリを介して利用できます。

于 2012-01-31T10:51:32.627 に答える
0

ローダーのもう1つの利点は、画面の回転イベントを適切に処理するのに対し、asynctaskでは問題が発生する可能性があることです。

于 2012-01-31T11:03:31.680 に答える