Android Api 15 以降のアプリを開発しています。
私はしばらくの間、カスタムCursorAdapter
実装を使用してきました。ListView
何千もの行 (レコード) があってもListView
、 でパフォーマンス面を処理できるという印象を受けました。
私の携帯電話、Sony Xperia U は、10 ~ 20 行を超えてスクロールするのに苦労しています。最初の数行はうまくスクロールしますが、その後、吃音の壁にぶつかり、デバイスが応答しなくなります (全部で合計 70 行)。Android 4.0.4 を実行しています。Samsung S3 や Sony Xperia Z などの他の携帯電話のパフォーマンスははるかに優れていますが、これはどの時点で低下するのでしょうか。これら 2 台の電話は 4.1 を実行しています。CursorWindow
Xperia U で以下の警告が表示されます。
私は貿易、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
また、潜在的に 4.2 までに問題があることも読みましたがCursorWindow
、これは誤りである可能性があります。
各行のデータに関しては、次のものがありSQLite
blob
ます。
byte[] avatar = cursor.getBlob(cursor.getColumnIndex(Profile.TABLE_COLUMN_AVATAR));
これは問題の1つである可能性があると思いますが、確信が持てません。おそらく、イメージを SD カードに切り替えて、代わりにパスを DB に保存する必要があります。とはいえ、現在の設定を維持したいと思います。
これは、私の現在のアプローチが管理しにくくなるため、新しいアプローチが必要になる可能性があることを示唆しています。それで、これはエンドレスアダプターソリューションについて考えさせます。これは、カーソルデータを制限/オフセットで取得し、埋めて、ArrayAdapter
CommonWareのようなフレームワークを使用することを意味しますEndlessAdapter
(おそらく)?
- 私のパフォーマンスの問題は
CursorAdapter
、 s を使用することでより多く発生しBlob
ますか? - 潜在的に大規模なデータ セットでエンドレス アダプター アプローチを使用する必要がありますか?
- CommonWare は
EndlessAdapter
4 年経った今でも有効なソリューションですか?