1

AsyncTask を使用してデータをダウンロードしてデータベースに保存するアクティビティがあります。データベースを開くには、Context パラメータを SQLiteOpenHelper の onCreate メソッドに渡す必要があります。これは、データベースが何らかの形でコンテキストを必要とすることを意味します。

そして、私はただ興味があります.デバイスが回転し、アクティビティが破棄と作成のサイクルを経るとどうなるでしょうか? アクティビティの onCreate() メソッドではなく、アクティビティのコンストラクタでデータベースを開くことはできますか?

問題は、別のスレッドから DB を使用していて、アクティビティが破棄されて再作成されたときに正確に何が起こるかを知りたいことです。

4

2 に答える 2

1

1 つの解決策は、ActivityContext の代わりに ApplicationContext を使用することです。Application コンストラクターから ApplicationContext を要求する静的メソッドのみが必要です。

ある種のシングルトンを使用してコンテキストにアクセスする場合、同時実行性に問題はありません。

ここで例を参照してください: http://androidcookbook.com/Recipe.seam?recipeId=1218

別のアプローチは、開いているデータベース接続を追跡する LoaderManager を使用することです。

ここを参照してください: http://developer.android.com/reference/android/app/LoaderManager.html (完全な例もあります)

LoaderManager は、Android 1.5 までの互換性パッケージで利用できます。

マイケル

于 2012-04-14T19:11:29.703 に答える
1

バックグラウンドでいくつかのデータベース操作を実行したい場合。「サービス」を使用する必要があります。サービスは、バックグラウンドで長時間実行される操作を実行できます。

ここにリンクがあります:http://developer.android.com/guide/topics/fundamentals/services.html

于 2012-04-14T19:15:33.163 に答える