Android是否缓存xml布局文件中加载的可绘制资源?

时间:2013-12-24 23:39:05

标签: android android-layout android-fragments

我有ViewPager加载大量碎片(+20)。这些片段中的每一个都只是一个片段的实例,唯一改变的是每个片段的内容。除了其他小部件之外,这个片段的UI还有4个不同的ImageViews,它们都加载了相同的可绘制资源,但当然位于UI的不同部分。

现在,如果我们考虑到我可能拥有这个方案的20个片段,我们谈论的是80(20 * 4)个ImageViews,它们都会加载相同的drawable。

所以,这让我想知道,Android是否以任何方式缓存从xml布局加载的资源?如果没有,是否有更好的选择,然后只需在代码中加载此drawable,缓存它并在每次创建此片段的新实例时以编程方式将其附加到相应的ImageView上?

感谢。

3 个答案:

答案 0 :(得分:7)

Android确实使用Drawable组件进行某种回收管理。我已经注意到,当Drawables使用相同的资源并使用ColorFilter时,这一点非常清楚,而且我已经看到错误的颜色与以前创建的drawable一起在UI中尚未显示。

我会说你的方法还可以。

在这篇文章中,Romain解释说Drawables分享了一些信息,例如他们正在绘制的Bitmaphttp://www.curious-creature.org/category/android/page/2/

答案 1 :(得分:3)

只是对接受的答案中提供的博客条目的摘要,因此人们不必阅读整个博客。在博客文章的例子中,作者讨论了创建各种按钮,这些按钮最终将共享相同的drawable:

  

这样,所有应用程序中的所有按钮共享相同的位图,   这节省了大量的内存。

所以是的,显然Android确实优化了加载的资源。

答案 2 :(得分:-4)

以下是以编程方式更改imageview图像的方法:

        Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.your_drawable);
    your_imageView.setImageBitmap(bitmap);

希望有这个帮助,你可以在这里找到更多的tutoriel click here