2016-07-21 8 views
0

私のアプリケーションの同じランタイムで、すべてのローカルデータベースを削除し、新しい暗号化で再作成できるシナリオがあります。その端のケースが可能ですが。コンテンツプロバイダによって開かれたオープンdb接続を閉じるandroid

問題は、システムがコンテンツプロバイダーを介してアクセスされたため、これらのデータベースへのオープンな接続を維持していることです。古いものが削除された後に同じランタイムで新しいデータベースを作成または書き込もうとすると、データベースが読み取り専用であるというエラーが表示されます。私がアプリを殺して再開すれば、それは問題ありません。

finishAffinity()を使用して手動でアプリを強制終了しようとしましたが、システムがデータベース接続をクリーンアップするのに十分なほど少なくともアプリを強制終了させるわけではありません。

システムに強制的にデータベースへのオープン接続を強制することはできますか?

答えて

0

データベースを使用しており、読み取りモードで接続を開いている場合、データベース内のデータを更新または追加することはできません。 あなたが最後に

db.close(); 

をuingによって開かれたデータベースを閉じる必要があります。

+0

私はdbを明示的に閉じる方法を知っています。しかし、私はどこにでも明示的にオープンしているわけではなく、コンテンツプロバイダを使用しており、開いているデータベースをクローズするための参照はありません。 – nserror

+0

** mProvider.shutdown(); **を使用 –

関連する問題