2012-05-09 19 views
0

この質問にはさまざまなバージョンがありますが、私の問題のための最良のアプローチについて明確な答えが得られていませんでした。Android SDCard I/Oマウントとアンマウントを管理する

私がやっていることは、SDカードにSQLiteデータベースを作成していることです。私はそれからクエリをしてそれに書き込むことができるようにしたい。

私は持っている質問は、SDカードがマウントされていないときに管理する最良の方法です。 MP3プレイヤーのようにアプリケーションを閉じても問題ありません。ただし、dbへの書き込み操作が部分的に行われないようにしたいと思います。

私が持っていた考えの1つは、beginTransactionを使用して、それを成功としてマークし、end transactionを呼び出します。私が持っている質問は、トランザクションの終了が呼び出されないとどうなるかです。潜在的にデータ破損につながる可能性はありますか?また、アンマウントされたsdカードの通知を受け取るために何を聞くべきか理解するための助けが必要です。データベース内のトランザクションの素晴らしいところです

おかげ

答えて

1

- あなたが心配する必要はほとんどない:

「SQLiteのでは単一のトランザクション内のすべての変更は全く完全かどうか を発生するのいずれか、 に変更を書き込む行為があっても、

によってプログラムがクラッシュしたり、オペレーティングシステムがクラッシュしたり、電源障害が発生したりすることがあります。ディスクにデータを書き込み中にデータベースが存在するが(最悪の場合)停電のように振る舞うべきで除去さhttp://www.sqlite.org/transactional.html

ディスクから撮影

。データベースは、次の起動時にそのデータを破棄します。

したがって、トランザクションがコミットされるとすぐに、文を実行するメソッド呼び出しによってすべてのデータが格納されます。それ以外の場合、トランザクションのデータは保存されません。どちらの場合も一貫した状態になります。

唯一の留意事項に注意してください:一緒に(つまり原子的に)実行する必要があるすべてのステートメントが1つのトランザクション内にある必要があります。

+0

パトリック、あなたはどのようにsdカードがアンマウントされた後にアプリケーションを閉じるための任意の洞察力を持っていますか? –

+0

こんにちは。部分的にはい。あなたのアプリが外部ストレージにインストールされている場合、ストレージがアンマウントされたらAndroidシステムによって閉じられます[ref](http://developer.android.com/guide/appendix/install-location.html)。データベースのみが外部ストレージにインストールされている場合は、ACTION_MEDIA_EJECTインテント用のブロードキャストレシーバの登録に興味があります。[post](http://stackoverflow.com/questions/6293886/not-getting-the-sd-カード関連のインテントから私の放送受信機)。 – Patrick

関連する問題