Android ImageView设置图像位图

Android ImageView设置图像位图,android,memory,bitmap,imageview,bitmapfactory,Android,Memory,Bitmap,Imageview,Bitmapfactory,我试图更好地理解Android如何处理图像,以便更有效地使用内存。我在位图中存储了一个图像,我正在使用ImageView.setImageBitmap来显示它。现在的问题是-它将来会使用我传递给它的位图,还是它正在复制它,而我创建的位图在调用setImageBitmap后不再使用 如果它将保留对我传递的位图的引用,那么当使用Inpurgable选项通过BitmapFactory创建位图时,它将如何工作?ImageView是否会阻止位图从内存中临时清除?只有当ImageView具有View.VIS

我试图更好地理解Android如何处理图像,以便更有效地使用内存。我在位图中存储了一个图像,我正在使用ImageView.setImageBitmap来显示它。现在的问题是-它将来会使用我传递给它的位图,还是它正在复制它,而我创建的位图在调用setImageBitmap后不再使用

如果它将保留对我传递的位图的引用,那么当使用Inpurgable选项通过BitmapFactory创建位图时,它将如何工作?ImageView是否会阻止位图从内存中临时清除?只有当ImageView具有View.VISIBLE状态时,还是View.GONE和View.INVISIBLE状态时,才会发生这种情况?或者只有在屏幕上可以看到ImageView时

还有一件事——查看Android源代码可以发现,编码的字节数据总是被复制到内存中,inInputShareable当前被忽略。它是否计入android Java应用程序的16/24MB内存限制


谢谢

看看这篇文章:


有一些有用的课程可以帮助您更好地理解android的内存管理

看看这篇文章:


有一些有用的课程可以帮助您更好地理解android的内存管理

我认为您可以通过简单的实验回答一些问题。我认为您传递给setImageBitmap的位图是直接使用的。而且,无论视图是否消失,如果它引用它,它永远不会被垃圾收集器破坏。波兹德罗;不幸的是,事情并没有那么简单。即使ImageView保留对已传递位图的引用,也不意味着无法清除位图中存储的数据。根据文档,生成的位图将分配其像素,以便在系统需要回收内存时可以清除这些像素,当需要再次访问像素时,它们将自动重新解码。我要问的是ImageView是否会阻止清除已解码的数据,或者在需要时将其清除并重新解码。没有简单的方法可以找到,它的行为可能取决于几个因素。当需要再次访问像素时,它们将自动重新解码-如果ImageView已按原样设置位图,在运行时创建,而没有任何信息从何处获取,该怎么办。如果这是真的,它将永远消失。我不这么认为。你又错了。当位图通过BitmapFactory使用Inpurgable创建时,我们正在讨论的就是这种情况,编码数据的副本也会被存储。我的印象是你们忘了位图是一个包含大量数据的复杂类,而不是一个包含解码图片的简单变量。参考文档了解更多信息:我认为你可以通过简单的实验回答一些问题。我认为您传递给setImageBitmap的位图是直接使用的。而且,无论视图是否消失,如果它引用它,它永远不会被垃圾收集器破坏。波兹德罗;不幸的是,事情并没有那么简单。即使ImageView保留对已传递位图的引用,也不意味着无法清除位图中存储的数据。根据文档,生成的位图将分配其像素,以便在系统需要回收内存时可以清除这些像素,当需要再次访问像素时,它们将自动重新解码。我要问的是ImageView是否会阻止清除已解码的数据,或者在需要时将其清除并重新解码。没有简单的方法可以找到,它的行为可能取决于几个因素。当需要再次访问像素时,它们将自动重新解码-如果ImageView已按原样设置位图,在运行时创建,而没有任何信息从何处获取,该怎么办。如果这是真的,它将永远消失。我不这么认为。你又错了。当位图通过BitmapFactory使用Inpurgable创建时,我们正在讨论的就是这种情况,编码数据的副本也会被存储。我的印象是你们忘了位图是一个包含大量数据的复杂类,而不是一个包含解码图片的简单变量。参考文档了解更多信息:请注意,答案应该是搜索解决方案的终点,而不是参考文献的另一个中途停留点,随着时间的推移,这些参考文献往往会过时。请考虑在这里添加一个独立的概要,将链接作为参考。最初我试图留下评论而不是像这样的答案。然而这个网站对新用户一点也不友好,仅仅为了一个评论?jeezNote,答案应该是搜索解决方案的终点,而不是参考文献的另一个中途停留点,随着时间的推移,这些参考文献往往会变得陈旧。请考虑在这里添加一个独立的概要,将链接作为参考。最初我试图留下评论而不是像这样的答案。然而,这个网站对新用户一点也不友好,50 只是为了发表评论?天哪