作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
跟进 Storing a Bitmap resource in a static variable ,似乎在 View
中存储对 android.graphics.Bitmap
的静态引用可能会泄漏对实例化它的第一个 View
的引用.在 Android 中解决这个问题的惯用方法是什么?我不想每次实例化此 View 的实例时都调用 BitmapFactory.decodeResource(resource, id)
,因为这将在每个 Activity 中完成(多次)。我希望这个小的 Bitmap
始终保留在内存中。那么,执行以下操作的正确方法是什么:
public class MyView extends View {
private static Bitmap star;
public MyView(Context context) {
synchronized(this) {
if (star == null) {
star = BitmapFactory.decodeResource(getResources(), R.drawable.star);
}
}
}
// ...
}
最佳答案
在您的 View 中创建一个静态清理方法,您可以从 Activity 的 onPause
() 调用该方法。在该调用中,调用位图的 recycle()
并清除引用。同样,不是在构造函数中创建位图,而是在 Activity 的 onResume()
中调用初始化调用。
如果您担心可能存在重叠,因为您的 View 是跨 Activity 使用的,您可以让初始化和清理调用维护一个引用计数,以便仅在计数达到 0 时销毁位图。如果位图足够小,还可以考虑onCreate()
/onDestroy()
。
请务必在使用前检查 View 类中的位图引用是否为空。
关于java - 如何将位图保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8824004/
我是一名优秀的程序员,十分优秀!