在API演示中,有一个有效列表适配器的示例,其中所有位图都在适配器构造函数中预加载:
// Icons bound to the rows.
mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_1);
mIcon2 = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon48x48_2);
如果适配器必须处理大量的位图,它仍然是一个好的做法,或者在getView中做类似的事情会更好:
holder.myImage.setImageDrawable(context.getResources().getDrawable(R.drawable.icon48x48_1));
请注意,在我的情况下,我可以使用10-15个可能的位图,但只会同时使用几个位图。我担心适配器使用的内存。
由于
答案 0 :(得分:1)
如果图标真的是48x48像素,那么它们就不会那么大了,而且由于你有一套已知的图标,预加载它们可能就好了。如果出现以下情况,我不会使用这种方法:
您始终可以从DDMS转储堆并使用Eclipse MAT插件对其进行检查,以获取实际使用的堆空间量的透视图。但是,在Honeycomb或Ice Cream Sandwich上进行测试,因为您可以获得更好的跟踪位图堆消耗的结果。
答案 1 :(得分:0)
执行此操作的一种方法是等待列表停止,然后为可见的列表项设置图像。这样,您只需加载当前显示的图像(与预加载构造函数中的所有内容相比),并且不会使滚动感觉不稳定或缓慢。这是一项更多的工作,但它会使你的列表非常顺利,内存使用量最少。