はい、非常に優れたアイデアです。最初の実行時にのみ、アプリケーションはその特定のデバイス画面サイズのイメージをsvgから生成し、キャッシュに保存しますそれ以降は常にこれらを使用してください。多くのCPUを節約し、UIの読み込みを高速化します。
ただし、キャッシュファイルを保存しておき、アプリケーションのバージョンを含む名前を付けることをおすすめします。いくつかの異なるsvgイメージでアップデート(バージョン2など)をリリースすると、古いファイルの代わりに異なる名前の新しいファイルが使用されます。
通常、Context.getCacheDir()
で10Mbまで使用できますが、ストレージが不足していると、このフォルダはクリーニングされます。
また、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;
}
}
ありがとう:
は、ここで私はほとんどちょうどアプリのキャッシュディレクトリから、保存して、直列化オブジェクトを取得するために使用するクラスです。実際に私はキャッシュにファイルを格納していません。私はRAMを使用しています!それはまだ良いアイデアですか? –
@Seraphim RAMにキャッシュを使用していますか?変数を格納するだけです。キャッシュは、アイテムをディスクに格納するときにはるかに便利です。 –
アプリケーションのいくつかの場所で同じPictureDrawableを再利用するといくつかの利点がありますか? –