2012-04-14 8 views
1

私は、AsyncTaskを使用してデータベースにダウンロードしてデータを保存するアクティビティを持っています。データベースを開くには、Context paramをSQLiteOpenHelperのonCreateメソッドに渡す必要があります。つまり、データベースには何らかのコンテキストが必要です。Androidでアクティビティを再作成するときにDatabaseHelperを使用する

私はちょうど興味がありますが、デバイスが変わってアクティビティが破壊されてサイクルが発生するとどうなりますか?アクティビティのonCreate()メソッドではなく、アクティビティのコンストラクタでデータベースを開くことはできますか?

問題は、私は別のスレッドからのDBを使用して、私は活動が破壊され、

+0

あなたはonDestroy()メソッドをオーバーライドして、ここにあなたのDBオブジェクトを閉じる必要があります。 –

+0

しかし、そうすると、ダウンロードしたデータをデータベースに保存するバックグラウンドスレッドがクラッシュします。その仕事を終わらせてからdbを閉じる方法はありますか? – renal

答えて

1

一つの解決策ではなくActivityContextののApplicationContextを使用することです再作成されているときに起こる内容を正確に把握したいということです。 ApplicationコンストラクタからApplicationContextを要求する静的メソッドのみが必要です。

シングルトンを使用してコンテキストにアクセスすると、並行性に問題はありません。

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

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

こちらをご覧ください:http://developer.android.com/reference/android/app/LoaderManager.html (完全な例があまりにもあります)

をLoaderManagerがダウンのための互換性パッケージで提供されていますアンドロイド1.5に

マイケル

+0

ありがとう、マイケル!私はそれが私が探していたものだと思う。申し訳ありませんが、投票することはできません – renal

+0

歓迎;-) –

1

包みなさいあなたには、いくつかのDBをしたいですバックグラウンドでの操作。あなたは "Sevices"を使うべきです。 サービスはバックグラウンドで長時間実行される操作を実行できます。ここ

はリンクです:http://developer.android.com/guide/topics/fundamentals/services.html

+0

お返事ありがとうございます!サービスは良いですが、私のスレッドは、それが稼働しているときにアクティビティと通信する必要があります。だから、AsyncTaskはより良く適合します – renal

関連する問題