[英]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,但這可能是錯誤的:
當涉及到每一行的數據時,我有一個SQLite
blob
:
byte[] avatar = cursor.getBlob(cursor.getColumnIndex(Profile.TABLE_COLUMN_AVATAR));
我認為這可能是問題之一,但我不確定。 我可能應該將圖像切換到SD卡,並將路徑存儲在DB中。 我想保留當前設置。
這表明我當前的方法將無法管理,因此可能需要一種新方法。 因此,這讓我想到了一個Endless Adapter解決方案,這意味着獲取具有限制/偏移量的游標數據並填充ArrayAdapter
並使用CommonComm的EndlessAdapter
類的框架(也許)?
CursorAdapter
, CursorAdapter
由Blob
的? EndlessAdapter
仍然是一個好的解決方案? 我的性能問題是否較少出現在CursorAdapter上,而更多是由於使用Blob?
使用Traceview確定問題所在的確切位置。 將來,您可能還會考慮在問題中更加具體,因為我們不知道“艱難時期”的含義。
我應該對可能的大型數據集使用“無盡適配器”方法嗎?
如果您的“艱難時期”是最初從數據庫中加載數據,盡管那里的人可能有一個永無休止的解決方案,但可以使用一組CursorAdapters
正常工作。
如果您的“艱難時光”是滾動結果,那么EndlessAdapter
或等效產品將無濟於事。
4年后,CommonWare的EndlessAdapter是否仍然是一個好的解決方案?
對於其用例,請確定。 再說一次,我有偏見。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.