0

Android Api 15 以降のアプリを開発しています。

私はしばらくの間、カスタムCursorAdapter実装を使用してきました。ListView何千もの行 (レコード) があってもListView、 でパフォーマンス面を処理できるという印象を受けました。

私の携帯電話、Sony Xperia U は、10 ~ 20 行を超えてスクロールするのに苦労しています。最初の数行はうまくスクロールしますが、その後、吃音の壁にぶつかり、デバイスが応答しなくなります (全部で合計 70 行)。Android 4.0.4 を実行しています。Samsung S3 や Sony Xperia Z などの他の携帯電話のパフォーマンスははるかに優れていますが、これはどの時点で低下するのでしょうか。これら 2 台の電話は 4.1 を実行しています。CursorWindowXperia 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、これは誤りである可能性があります。

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));

これは問題の1つである可能性があると思いますが、確信が持てません。おそらく、イメージを SD カードに切り替えて、代わりにパスを DB に保存する必要があります。とはいえ、現在の設定を維持したいと思います。

これは、私の現在のアプローチが管理しにくくなるため、新しいアプローチが必要になる可能性があることを示唆しています。それで、これはエンドレスアダプターソリューションについて考えさせます。これは、カーソルデータを制限/オフセットで取得し、埋めて、ArrayAdapterCommonWareのようなフレームワークを使用することを意味しますEndlessAdapter(おそらく)?

  1. 私のパフォーマンスの問題はCursorAdapter、 s を使用することでより多く発生しBlobますか?
  2. 潜在的に大規模なデータ セットでエンドレス アダプター アプローチを使用する必要がありますか?
  3. CommonWare はEndlessAdapter4 年経った今でも有効なソリューションですか?
4

1 に答える 1

0

私のパフォーマンスの問題は、CursAdapter ではなく、Blob を使用した場合に発生しますか?

Traceview を使用して、問題がどこにあるかを正確に特定します。将来的には、「苦労」が何を意味するのかわからないため、質問をより具体的にすることを検討することもできます.

潜在的に大規模なデータ セットでエンドレス アダプター アプローチを使用する必要がありますか?

あなたの「苦労」が最初にデータベースからデータをロードすることにある場合、おそらく、CursorAdapters.

あなたの「苦労」が結果をスクロールすることにある場合は、いいえ、EndlessAdapterまたは同等のものは役に立ちません。

CommonWare の EndlessAdapter は 4 年経った今でも有効なソリューションですか?

そのユースケースについては、確かに。繰り返しますが、私は偏っています。:-)

于 2013-08-14T20:54:05.657 に答える