32

SQLite データベースを SD カードに移動しましたが、次の例外がスローされることがあります。

android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error

これを防ぐ方法について何か提案はありますか?

4

1 に答える 1

9

外部ストレージを使用しているため、アプリケーションは外部ストレージの状態を認識している必要があります。これは 経由で取得できますEnvironment.getExternalStorageState()

状態が の場合にのみ、外部ストレージにアクセスする必要がありますMOUNTED

デバイスの起動中にファイル (または SQLite DB; それは単なるファイルです!) を開こうとすると、間違いなく問題が発生します。これは、外部ストレージがデバイスの起動時 (ホーム画面が表示された後) までマウントされないためです。

これを回避するには、 を登録しIntentFilterて、外部ストレージ状態のすべての変更が通知されるようにし、それに応じて動作するようにします。

ドキュメントを読むことは常に良い考えです!詳細については、Android のドキュメントを参照してください: http://developer.android.com/reference/android/os/Environment.html

外部ストレージがいつ利用できなくなるかを制御できないため、この目的で外部ストレージを使用することは疑わしいです! たとえば、ユーザーは自分のデバイスをコンピューターの USB に接続し、[USB 大容量ストレージを有効にする] オプションを選択して、コンピューターからデバイスの外部ストレージにアクセスできるようにします。悪いニュース!アプリは外部ストレージから切断され、ほとんどの場合、クリーンアップ IO を実行する機会がありません!

このような状況では、データベースに入れるすべてのデータをどうするかという問題が残ります。

于 2011-10-21T14:36:04.563 に答える