2013/11/27

Android の Files と Cache の違い

Android はアプリの情報を格納するための場所として、以下のようなメソッドを提供しています。
それぞれ、以下のようなパスになります。Xperia Acro HD (SO-03D) で動作させてみた結果。デバイスによって異なる可能性があります。
getFilesDir()
/data/data/com.kokufu.android.test.exstoragetest/files

getExternalFilesDir()
/mnt/sdcard/Android/data/com.kokufu.android.test.exstoragetest/files

getCacheDir()
/data/data/com.kokufu.android.test.exstoragetest/files/cache

getExternalCacheDir()
/mnt/sdcard/Android/data/com.kokufu.android.test.exstoragetest/files/cache

見てのとおり、ほぼ同じディレクトリを表しているのですが、どう違うのでしょうか?

getCacheDir() の JavaDoc には、以下のように書かれています。

Returns the absolute path to the application specific cache directory on the filesystem. These files will be ones that get deleted first when the device runs low on storage. There is no guarantee when these files will be deleted.
Note: you should not rely on the system deleting these files for you; you should always have a reasonable maximum, such as 1 MB, for the amount of space you consume with cache files, and prune those files when exceeding that space.

(意訳)
アプリ固有のキャッシュディレクトリの絶対パスを返します。ここに格納されているファイルは、ストレージの容量が少なくなった場合削除されます。いつ削除されるかは保証されていません。
Note: システムがこれらのファイルを消すことを期待してはいけません。妥当な上限(たとえば 1MB など)を決め、キャッシュファイルがそれらの値を超えるようであれば、あなたが削除しなければなりません。


つまり、Cache ディレクトリは勝手に消される可能性があるけれど、いつ消されるかは保証されていないってことですね。
逆に言うと、Files ディレクトリはシステムに勝手に消されることはありません。

しかし、忘れてはいけないのが以下の画面の存在。

設定 → アプリ

この画面で「データを削除」を選択された場合、有無を言わさず Files ディレクトリ以下が(Cache ディレクトリも含めて)削除されてしまいます。
システムに勝手に消されることは無いけれど、ユーザに消されることはあるということです。



0 件のコメント: