我目前正在模拟器上测试我的应用程序,并注意到在我执行动画时会发生大量垃圾收集。
我担心所有这些垃圾收集可能都没有必要。
我有一个自定义游标适配器:
public class AdapterCursorGrid extends CursorAdapter {
此适配器使用viewflipper
填充网格项。
要重新创建下面的调试,请执行以下操作:
viewflipper
页面上的项目holder.viewFlipper.showNext();
viewflipper
页面holder.viewFlipper.showPrevious();
调试如下所示:
/*
* Step 1. Click an item on the first `viewflipper` page
*/
D/dalvikvm(15415): GC_FOR_ALLOC freed 1628K, 20% free 11041K/13767K, paused 74ms
D/dalvikvm(15415): GC_CONCURRENT freed 3K, 16% free 11662K/13767K, paused 6ms+16ms
D/dalvikvm(15415): GC_CONCURRENT freed 454K, 13% free 12081K/13767K, paused 45ms+6ms
/*
* Step 4. Click back on second `viewflipper` page
*/
I/ContentManager(15415): Update() record
I/AdapterCursorGrid(15415): bindView()
D/dalvikvm(15415): GC_FOR_ALLOC freed 1448K, 19% free 11237K/13767K, paused 69ms
D/dalvikvm(15415): GC_CONCURRENT freed 6K, 14% free 11855K/13767K, paused 8ms+11ms
I/AdapterCursorGrid(15415): bindView()
D/dalvikvm(15415): GC_CONCURRENT freed 454K, 11% free 12274K/13767K, paused 14ms+10ms
D/dalvikvm(15415): GC_FOR_ALLOC freed 1241K, 19% free 11231K/13767K, paused 142ms
D/dalvikvm(15415): GC_CONCURRENT freed 1K, 14% free 11855K/13767K, paused 7ms+7ms
D/dalvikvm(15415): GC_CONCURRENT freed 455K, 11% free 12274K/13767K, paused 5ms+12ms
I/AdapterCursorGrid(15415): bindView()
D/dalvikvm(15415): GC_FOR_ALLOC freed 1242K, 19% free 11232K/13767K, paused 69ms
D/dalvikvm(15415): GC_CONCURRENT freed 1K, 14% free 11855K/13767K, paused 5ms+5ms
D/dalvikvm(15415): GC_CONCURRENT freed 455K, 11% free 12274K/13767K, paused 5ms+12ms
从调试中你可能会发现我在第4步执行了更新。这是一个调用我的内容提供程序,并且是通过ui线程完成的。
最后,viewflipper
有一个半复杂的布局,其中包含各种ImageView
和TextView
s浮动的相对布局。 3 TextView
s,2/3 ImageViews
。
ImageView
中填充bindView
的示例如下:
/*
* Set picture
*/
int pictureColumnIndex = cursor.getColumnIndex(MyTable.TABLE_COLUMN_PICTURE);
byte[] picture = cursor.getBlob(pictureColumnIndex);
Bitmap bitmapPicture = null;
if (!cursor.isNull(pictureColumnIndex) && picture.length > 0) {
InputStream inputStream = new ByteArrayInputStream(picture);
bitmapPicture = BitmapFactory.decodeStream(inputStream);
bitmapPicture = ImageUtils.scaleBitmap(context,bitmapPicture,ConversionUtils.convertDpToPixels(context, mResources.getDimension(R.dimen.grid_item_width_pic_resize)));
bitmapPicture = ImageUtils.roundedBitmapCorners(bitmapPicture, ConversionUtils.convertDpToPixels(context, 2));
holder.imageViewPicture.setImageDrawable(new BitmapDrawable(bitmapPicture));
} else {
holder.imageViewPicture.setImageDrawable(null);
}
我的问题是:
bindView
被调用超过1次(在步骤4中被称为3次)?