簡體   English   中英

從CursorAdapter過渡到Endless適配器實現

[英]Moving from CursorAdapter to an Endless adapter implementation

我正在為Android Api 15及更高版本開發一個應用程序。

我已經將自定義CursorAdapter實現與ListView一起使用了一段時間。 我的印象是,即使具有成千上萬的行(記錄), ListView也會處理性能方面的問題。

我的手機Sony Xperia U很難滾動到10到20行。 前幾行滾動良好,然后我碰到了結巴的障礙,設備變得無響應(總共70行)。 它正在運行Android 4.0.4。 三星S3和索尼Xperia Z等其他手機的性能要好得多,但是到什么時候性能會下降。 這兩個電話正在運行4.1。 我在Xperia U上看到CursorWindow警告。

我已經實現了交易, ViewHolder模式等方面的所有技巧,並且所有圖像都加載在AsyncTask的內部。

無論如何,我在性能方面遇到的麻煩並不在於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

我還閱讀了CursorWindow可能存在的問題, 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中。 我想保留當前設置。

這表明我當前的方法將無法管理,因此可能需要一種新方法。 因此,這讓我想到了一個Endless Adapter解決方案,這意味着獲取具有限制/偏移量的游標數據並填充ArrayAdapter並使用CommonComm的EndlessAdapter類的框架(也許)?

  1. 我的性能問題不是由CursorAdapterCursorAdapterBlob的?
  2. 我應該對可能的大型數據集使用“無盡適配器”方法嗎?
  3. 4年后,CommonWare的EndlessAdapter仍然是一個好的解決方案?

我的性能問題是否較少出現在CursorAdapter上,而更多是由於使用Blob?

使用Traceview確定問題所在的確切位置。 將來,您可能還會考慮在問題中更加具體,因為我們不知道“艱難時期”的含義。

我應該對可能的大型數據集使用“無盡適配器”方法嗎?

如果您的“艱難時期”是最初從數據庫中加載數據,盡管那里的人可能有一個永無休止的解決方案,但可以使用一組CursorAdapters正常工作。

如果您的“艱難時光”是滾動結果,那么EndlessAdapter或等效產品將無濟於事。

4年后,CommonWare的EndlessAdapter是否仍然是一個好的解決方案?

對於其用例,請確定。 再說一次,我有偏見。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM