gpt4 book ai didi

android - 在 Android 上缓存 SVG 图像和内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:27 24 4
gpt4 key购买 nike

我正在使用 SVG Android ( http://code.google.com/p/svg-android/ )。我在我的应用程序的多个 Activity 中使用相同的 svg 文件。构建缓存来存储和检索图像是个好主意吗?

我正在使用 SparseArray 以这种方式存储 PictureDrawable(从 SVG 生成):

SVG svg = SVGParser.getSVGFromResource(resources, resourceId);
PictureDrawable pictureDrawable = svg.createPictureDrawable();
cache.put(resourceId, pictureDrawable);

在管理 PictureDrawable 对象时是否需要注意内存使用情况?我确认缓存中的最大项目将少于 50。

最佳答案

是的,这是一个非常好的想法,只有在第一次运行时,应用程序才会从 svg 生成特定设备屏幕尺寸的图像,并将它们存储在缓存中,并在之后一直使用这些图像。节省大量 CPU,更快的 UI 加载。

但是,我建议保存名称包含您的应用程序版本的缓存文件。如果您使用一些不同的 svg 图像发布更新(比如版本 2),那么将使用具有不同名称的新文件而不是旧文件。

通常可以在 Context.getCacheDir() 中使用最多 10Mb,系统将在存储空间不足时清理此文件夹。

此外,作为一个很好的措施,每次初始化 Cache 类时,您都可以做一些清理工作,即删除一些旧版本或不需要的项目。

这是我最常用于从 App 缓存目录中保存和获取可序列化对象的类:

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;
}

}

关于android - 在 Android 上缓存 SVG 图像和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15067834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com