从CursorAdapter移动到Endless适配器实现

时间:2013-08-14 20:39:50

标签: android android-cursoradapter cwac-endless

我正在为Android Api 15及更高版本开发应用程序。

我已经使用CursorAdapter的自定义ListView实施了一段时间了。我的印象是,即使有数千行(记录),ListView也会处理性能方面的问题。

我的手机,索尼Xperia U,很难滚动超过10到20行。前几行滚动得很好然后我撞到了一个口吃的墙,设备变得没有响应(总共70行)。它运行的是Android 4.0.4。其他手机,如三星S3和索尼Xperia Z表现得更好,但在什么时候这会降低。这两部手机正在运行4.1。我收到了Xperia U上的CursorWindow警告。

我已经实现了交易中的所有技巧,ViewHolder模式等,所有图片都加载到AsyncTask内。

无论如何,我遇到的关于表现的麻烦并不在于BindViewBindView方法很快就完成了 - 在1-3毫秒内完成。

我认为问题在于CursorWindow。我真的不知道这是什么!

08-14 21:01:58.913: W/CursorWindow(7116): Window is full: requested allocation 277981 bytes, free space 148792 bytes, window size 2097152 bytes

我还读到CursorWindow中有一个问题,最多可能是4.2,但这可能是错误的:

  

http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=4993

说到每行的数据,我有一个SQLite blob

byte[] avatar = cursor.getBlob(cursor.getColumnIndex(Profile.TABLE_COLUMN_AVATAR));

我认为这可能是其中一个问题,但我不确定。我可能应该将图像切换到SD卡并将路径存储在DB中。我想保留目前的设置。

这表明我目前的方法不可控,因此可能需要一种新的方法。所以这让我想到了一个无限适配器解决方案,这意味着使用限制/偏移来获取游标数据并填充ArrayAdapter并使用像CommonWare EndlessAdapter这样的框架(可能)?

  1. CursorAdapter使用Blob时,我的表现问题是否更少?
  2. 我是否应该使用具有潜在大型数据集的无限适配器方法?
  3. 4年后,CommonWare的EndlessAdapter仍然是一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

  

使用Blobs时,我的性能问题与CursorAdapter有关吗?

使用Traceview确定问题的确切位置。在将来,您可能还会考虑在您的问题中更具体,因为我们不知道“困难时期”意味着什么。

  

我是否应该使用具有潜在大型数据集的无限适配器方法?

如果您的“困难时期”最初是从数据库中加载数据,也许,尽管有人可能有一个无限列表解决方案,可以使用一组CursorAdapters正常工作。

如果你的“困难时期”在滚动搜索结果,那么不,EndlessAdapter或等价物对你没用。

  

CommonWare的EndlessAdapter 4年后仍然是一个很好的解决方案吗?

对于它的用例,当然。然后,我有点偏见。 : - )