0

別のスレッドにサムネイル画像が読み込まれた GridView があります。すべてのサムネイルの読み込みが完了した後、グリッド ビューをスクロールすると一貫して遅く (~5fps)、数行下にスクロールするとすぐに非常に高速 (~30fps) にスクロールします。

その後、グリッドビューを再作成すると、さらに下にスクロールするまで再び遅くなります。私はすでにそれを行っているので、ビューをリサイクルすることは問題ではありません。

(更新:正しいスロー トレース画像をアップロードしました)

内部ビューの描画呼び出しまで問題を追跡しました。遅い場合の Android Studio トレースは次のとおりです。

遅いトレース

そして、これが速いときのトレースです:

高速トレース

有罪のメソッドがandroid.view.ThreadedRenderer.draw()であることは明らかですが、これは内部呼び出しであり、これ以上テストすることはできません。トレースから、遅いのは描画ではなく、android.view.ThreadedRenderer.updateRootDisplayList()最終的に呼び出すandroid.widget.AbsListView.draw()が両方のトレースで同じくらい速く終了することを理解しています。android.view.ThreadedRenderer.draw()したがって、これを引き起こしているのは残りの部分であるに違いありません。

オンラインで検索して、ThreadedRenderer.javaクラスを見つけました

私が試したこと:

  • グリッドビューでハードウェア レンダリングを強制しても違いはありませんでした。

  • グリッドビューでソフトウェア レンダリングを強制すると、リストのスクロールが常に非常に遅くなります。

なぜこれが起こっているのでしょうか?

4

2 に答える 2

0

Android がビューをリサイクルしているため、初回以降のスクロールがはるかに高速です。これは、最初にビューを構築するのに最も時間がかかっていることを意味します。

あなたは少し深入りしすぎていると思います。中にサムネイルを同期的にダウンロードしていないことを確認する必要がありますdraw。画像をダウンロードするコードを削除するか、URL を "" に設定してみてください。基本的に、問題が何であるかを特定できるまで、サムネイル ビューを削除してみてください。これは、正しい軌道に乗るのに役立ちます。

于 2015-05-19T14:34:55.220 に答える