私のアプリケーションは、インターネットからダウンロードされ、Android電話でローカルにキャッシュされている画像を大量に使用しています。これらの画像を保存する正しい方法は何でしょうか。いくつかの方法があります。見てください、それは完全に満足できるものではありません。
SDカードのパブリックフォルダに保存します
SDカードの非公開フォルダーに保存します
アプリケーション内に保存します
アプリケーションの画像をローカルに保存してユーザーの注意をそらさず、ゴミを残さないための正しい方法は何ですか?
あなたの最善の解決策は以下を使用することです:
context.getCacheDir()
このディレクトリはアプリケーション専用であり、アンインストール時に削除されます。さらに、デバイスのスペースが不足している場合、システムはこのディレクトリから削除できます。
ドキュメントが言うことに注意してください:
これらのファイルを削除するシステムに依存しないでください。キャッシュファイルで消費するスペースの量には、常に1 MBなどの適切な最大値を設定し、そのスペースを超えたときにそれらのファイルをプルーニングする必要があります。
多くのスペースが必要で、SDカードを使用したい場合は、
getExternalCacheDir()
代わりに。これらはアンインストール時にも削除されますが、システムは外部ストレージで利用可能なスペースを監視しないため、スペースが少ない場合にこれらのファイルを自動的に削除しません。このオプションを使用する場合は、外部ストレージが利用可能であることも確認する必要があります
Environment.getExternalStorageState()
書き込む前に。
/sdcard/.donotscan/
のように 非表示のディレクトリに配置 (つまり、ドットを前に付けて)の場合、MediaScannerから画像を非表示にすることができます。
更新: Twitterでromainguyが言及 として、これは.nomedia
という名前のファイルをディレクトリに置いた場合にも機能します。
一番いい方法はデータベースを使うことだと思います。
更新:しかし;データのみをキャッシュしたい場合は、webkitで定義されたキャッシュマネージャーがあります。 CacheManager
以前はパッケージを使用していませんでしたが、メソッドを使用するのは簡単なようです。
static boolean cacheDisabled()
static boolean endCacheTransaction()
static CacheManager.CacheResult getCacheFile(String url, Map<String, String> headers)
static File getCacheFileBaseDir()
static void saveCacheFile(String url, CacheManager.CacheResult cacheRet)
static boolean startCacheTransaction()
Google Gears code で使用法を見つけることができます
これがお役に立てば幸いです。
CacheManagerを使用したくない場合は、データベースまたはローカル(SD以外)ファイル(ローカルファイルは完全なアンインストール時に削除されます)を使用して登録し、「ACTION_DEVICE_STORAGE_LOW」および「ACTION_DEVICE_STORAGE_OK」ブロードキャストアクションを受信します。次に、アプリケーションがデバイスに応じて領域を使いすぎている場合、および画像の削除を開始する必要がある場合を確認します。アプリケーションのサイズは引き続き増加しますが、増加と縮小を管理できます。