私のアプリケーションでは、多くの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ここで勝者の選択のようですが、多分私は何かが欠けています。