私のアプリケーションでは、多くのCRUDが必要です。ローカルのSQLiteデータベースからレコードを読み取り、オブジェクトを挿入し、更新します。ほとんどのクエリは非常に単純なので、UIスレッドで実行してもブロックされませんが、このアプリケーションでは、Windows Phoneパターンを採用したいと思います。アウトアニメーションはすぐに開始され、インアニメーションは結果が配信されたときに開始されます。
私はその仕事にを使用することを計画しましたが、Honeycomb(およびcompatパッケージ)がこの新しいローダーフレームワークAsyncTask
を導入していることに気づきました。主な利点は、サバイブ構成によってロードされたデータが変更されることです。CommonswareによるLoaderExプロジェクトは、SQLiteとフレームワークの間を橋渡ししますが、いくつかの問題が発生します。Loader
リソースのクリーンアップ:単一のアクティビティを使用し、SQLiteOpenHelperを作成して
onCreate()
閉じますonDestroy()
。ローダーマネージャーはまだ実行されている可能性があるため、ローダーマネージャーを確認pendingClose
し、コールバックオブジェクトにフラグを設定します。これにより、読み込みが完了するとカーソルとヘルパーが閉じます。データベースを閉じないことは有害ではないと思いますが、そうしないとSQLiteが文句を言い、エラーメッセージは好きではありません:)ここでのポイントは、データが構成の変更に耐えられないため、ローダーの利点がなくなることです。ローダーはいくつ作成する必要がありますか?私が最愛の人
Customer
とOrder
テーブルを持っているとしましょう。ローダーはまたはID
のように識別されCUST_L
ますORD_L
が、ユーザーが要約をクリックするたびに、詳細を含む画面を表示したいと思います。異なるパラメーターをrestart
持つローダーを使用する必要がありinit
ますか、それともランダムなIDを使用する新しいローダーを使用する必要がありますか?これは何十回も発生する可能性があります。ローダーフレームワークは、多くの小さな実行中のジョブを対象としていますか、それともいくつかの長時間実行中のタスクを対象としていますか?インターフェイス
ID
内でのを使用する目的は何ですか?LoaderCallbacks
なぜ単純ではないのinitLoader(params, callback)
ですか?コールバック内でロジックの一部を再利用できるとは思いません。最終的には(IDを使用してif-else
またはIDで)分岐するため、単純なアプローチswitch
ではなく、コールバックオブジェクトに識別子を指定する意味がわかりません。操作ごとのコールバック。
フレームワーク全体が私には過剰に設計されており、実際の有用性がないように思われるため、これを求めています。を使用してコードを一元化することのポイントがわかりません。LoaderManager
また、新しい機会が提供されAsyncTask
なかったことがわかりません。
SQLiteOpenHelper
唯一の勝利のポイントは、構成変更の存続ですが、リソースのクリーンアップのためにそれを利用することはできません。また、(明らかに)必要であるため、それを閉じるための代替方法を見つけることはできませんSQLiteCursorLoader
が、クリーンアップはユーザー。だからAsyncTask
ここで勝者の選択のようですが、多分私は何かが欠けています。