是的,这是一个非常好的主意,只有在第一次运行时,App 才会从 svg 为特定设备屏幕尺寸生成图像,并将它们存储在缓存中,然后一直使用这些图像。节省大量 CPU,更快的 UI 加载。
但是,我建议保存名称包含您的应用程序版本的缓存文件。如果您发布包含一些不同 svg 图像的更新(例如版本 2),则将使用具有不同名称的新文件而不是旧文件。
通常最多可以使用 10Mb Context.getCacheDir()
,系统会在存储空间不足时清理此文件夹。
此外,作为一个很好的措施,每次初始化Cache
类时,您都可以进行一些清理,即删除一些旧版本或不需要的项目。
这是我主要用来从 App 缓存目录中保存和获取 Serializable 对象的类:
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;
}
}