SQLite データベースを SD カードに移動しましたが、次の例外がスローされることがあります。
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
これを防ぐ方法について何か提案はありますか?
SQLite データベースを SD カードに移動しましたが、次の例外がスローされることがあります。
android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
これを防ぐ方法について何か提案はありますか?
外部ストレージを使用しているため、アプリケーションは外部ストレージの状態を認識している必要があります。これは 経由で取得できますEnvironment.getExternalStorageState()
。
状態が の場合にのみ、外部ストレージにアクセスする必要がありますMOUNTED
。
デバイスの起動中にファイル (または SQLite DB; それは単なるファイルです!) を開こうとすると、間違いなく問題が発生します。これは、外部ストレージがデバイスの起動時 (ホーム画面が表示された後) までマウントされないためです。
これを回避するには、 を登録しIntentFilter
て、外部ストレージ状態のすべての変更が通知されるようにし、それに応じて動作するようにします。
ドキュメントを読むことは常に良い考えです!詳細については、Android のドキュメントを参照してください: http://developer.android.com/reference/android/os/Environment.html
外部ストレージがいつ利用できなくなるかを制御できないため、この目的で外部ストレージを使用することは疑わしいです! たとえば、ユーザーは自分のデバイスをコンピューターの USB に接続し、[USB 大容量ストレージを有効にする] オプションを選択して、コンピューターからデバイスの外部ストレージにアクセスできるようにします。悪いニュース!アプリは外部ストレージから切断され、ほとんどの場合、クリーンアップ IO を実行する機会がありません!
このような状況では、データベースに入れるすべてのデータをどうするかという問題が残ります。