はい、非常に良いアイデアです。最初の実行時にのみ、アプリはその特定のデバイス画面サイズの画像を svg から生成し、キャッシュに保存し、その後は常にこれらを使用します。多くの CPU を節約し、UI の読み込みを高速化します。
ただし、アプリのバージョンを含む名前でキャッシュ ファイルを保存することをお勧めします。いくつかの異なる svg イメージを含む更新 (バージョン 2 など) をリリースすると、古いファイルの代わりに異なる名前の新しいファイルが使用されます。
通常、 で最大 10Mb を使用しても問題ありません。ストレージが不足するとContext.getCacheDir()
、システムはこのフォルダを消去します。
また、適切な手段として、クラスを初期化するたびにCache
、少しクリーンアップを行うことができます。つまり、古いバージョンを削除するか、アイテムを必要としません。
これは、アプリキャッシュディレクトリからシリアライズ可能なオブジェクトを保存して取得するために主に使用するクラスです。
public class ObjectCacheFile<T> {
private final File mFile;
public ObjectCacheFile(Context context, String name) {
mFile = new File(context.getCacheDir(), name);
}
public File getFile() {
return mFile;
}
public void put(T o) {
try {
if (!mFile.exists()) {
mFile.createNewFile();
}
FileOutputStream fos = new FileOutputStream(mFile);
ObjectOutputStream objOut = new ObjectOutputStream(fos);
try {
objOut.writeObject(o);
} finally {
objOut.close();
}
} catch (IOException e) {
Log.e(App.getLogTag(this), "error saving cache file", e);
}
}
@SuppressWarnings("unchecked")
public T get() {
if (!mFile.exists()) {
return null;
}
try {
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(mFile));
try {
return (T) objIn.readObject();
} finally {
objIn.close();
}
} catch (IOException e) {
Log.e(App.getLogTag(this), "error reading cache file", e);
} catch (ClassNotFoundException e1) {
Log.e(App.getLogTag(this), "cache file corrupted, deleting", e1);
mFile.delete();
}
return null;
}
}