2012-01-11 224 views
5

我有一个显示小位图的视图,这在我的应用程序的许多地方(特别是列表视图)中使用。每次使用BitmapFactory.decodeResource(resource, id)创建该视图的实例时,我正在加载该位图。我意识到我可以通过将一次位图加载到一个静态变量中(以便视图的所有实例都可以重用它)并且确实可以为每个视图实例节省大约2-4毫秒的时间,从而提高性能。我的问题是,以这种方式使用静态变量会导致Android中的任何类型的内存泄漏?我很担心,因为我还没有发现任何其他使用静态变量来存储位图的例子。在静态变量中存储位图资源

后续问题:How to keep a Bitmap in memory

+2

报价罗曼盖伊“当被拉伸连接到一个视图,该视图在上面的代码片段中,这意味着drawable有一个对TextView的引用,它本身有一个对活动(Context)的引用,它依次引用几乎所有的东西(取决于你的代码。)“...所以保持静态会导致内存泄漏。 – Nitin 2012-01-11 05:46:59

+1

Thanks @ 0cool,我看过那篇文章,但我不确定'android.graphics.Bitmap'(不是'android.graphics.drawable.BitmapDrawable')也是'Drawable'。那确实是这样吗? – 2012-01-11 16:37:17

+0

嗨,@AbdullahJibaly在使用位图之前,我们是否需要导入或扩展某些东西?正如我在做'位图设备;'和我的IDE给一个错误,_Bitmap无法解析为type_。提前致谢。 – Learner 2017-02-06 06:12:54

回答

1

保持位图对象为静态可能导致潜在的内存泄漏,看到官方文件在 http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

+3

感谢@calvin,我没有意识到'Bitmap'是'Drawable',因为在类层次结构中似乎没有任何关系。只是为了清楚我使用'android.graphics.Bitmap'而不是'android.graphics.drawable.BitmapDrawable'。如果同样的警告适用,那么这个问题最直接的解决方案是什么? – 2012-01-11 16:35:51

+0

跟进问题:http://stackoverflow.com/questions/8824004/how-to-keep-a-bitmap-in-memory – 2012-01-11 17:42:59

+0

位图是*不是*可绘制的,所以这个答案是错的,或者至少不受链接内容支持。 – 2017-08-09 14:14:38