Titanium で ImageView の Cache をアプリ起動時に削除する方法
Titanium 1.8 では ImageView に表示したリモートの画像は自動的に Cache されて、オフラインでも閲覧できて、とても便利なのですが、致命的な欠点があります。
- 永遠に削除されない
- キャッシュをクリアするメソッドが提供されていない
もしかしたらバグで今後直るかも知れませんが、現状は自力で対応しなければいけません。
画像のキャッシュなので起動時(もしくは終了時)に全部消してしまってもよいのですが、ある一定期間は保持したいという要望もあったので、指定期間更新が無い画像キャッシュファイルを削除するコードを書いてみました。
Titanium で ImageView のキャッシュを起動時に消す (for iOS only) — Gist
/** * 指定した時間更新されていない画像キャッシュを削除する。 * iOS にのみ対応。 * * @param {Number} expiredTime キャッシュ保持期限 (ms) */ module.exports = function(expiredTime) { var cachePath = Ti.Filesystem.applicationDataDirectory + '../Library/Caches/', cacheDir = Ti.Filesystem.getFile(cachePath), now = new Date().getTime(); if (cacheDir) { var files = cacheDir.getDirectoryListing(); if (files) { for (var i = 0, l = files.length; i < l; ++i) { var file = Ti.Filesystem.getFile(cachePath, files[i]), filename = file.name; // 画像キャッシュは '.' で終わるファイル名で保存されている if (filename[filename.length - 1] === '.') { if (now - file.modificationTimestamp() > expiredTime) { Ti.API.debug(files[i]); file.deleteFile(); } } } } } };
あとは起動時か、終了時に以下のようにして呼び出してください。
// 7日間更新がない画像キャッシュを削除する場合 require('deleteImageCache')(7 * 24 * 60 * 60 * 1000);
とりあえず手元の iOS 5.0.1 の iPhone4S の実機で動作することは確認しました。