0

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

一段时间以来,我一直在使用自定义CursorAdapter实现。ListView我的印象是,即使有数千行(记录),ListView也能处理性能方面的问题。

我的手机,索尼 Xperia U,滚动超过 10 到 20 行时很难。前几行滚动得很好,然后我遇到了口吃,设备变得无响应(总共 70 行)。它正在运行 Android 4.0.4。三星 S3 和索尼 Xperia Z 等其他手机的性能要好得多,但到什么时候才会降级。这两款手机运行的是 4.1。我CursorWindow在 Xperia U 上收到以下警告。

我已经实现了交易、ViewHolder模式等方面的所有技巧,并且所有图像都加载在AsyncTask's.

无论如何,我在性能方面遇到的麻烦并不在于BindView. 该BindView方法完成得非常快——在 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

我还读到可能在 4.2 中存在问题,CursorWindow但这可能是错误的:

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 卡并将路径存储在数据库中。不过,我想保留我当前的设置。

这表明我目前的方法将无法管理,因此可能需要一种新方法。所以这让我想到了一个 Endless Adapter 解决方案,这意味着获取带有限制/偏移量的游标数据并填充ArrayAdapter和使用像 CommonWare 的框架EndlessAdapter(也许)?

  1. CursorAdapter我的性能问题是否与使用s相比更少而更多Blob
  2. 我应该对潜在的大型数据集使用 Endless Adapter 方法吗?
  3. 4 年后, CommonWareEndlessAdapter仍然是一个好的解决方案吗?
4

1 回答 1

0

我的性能问题是否较少与 CursorAdapter 相关,而更多与使用 Blob 相关?

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

我应该对潜在的大型数据集使用 Endless Adapter 方法吗?

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

如果您的“困难时期”是滚动结果,那么不,EndlessAdapter或者等价物对您没有帮助。

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

对于它的用例,当然。再说一次,我有偏见。:-)

于 2013-08-14T20:54:05.657 回答