別のスレッドにサムネイル画像が読み込まれた GridView があります。すべてのサムネイルの読み込みが完了した後、グリッド ビューをスクロールすると一貫して遅く (~5fps)、数行下にスクロールするとすぐに非常に高速 (~30fps) にスクロールします。
その後、グリッドビューを再作成すると、さらに下にスクロールするまで再び遅くなります。私はすでにそれを行っているので、ビューをリサイクルすることは問題ではありません。
(更新:正しいスロー トレース画像をアップロードしました)
内部ビューの描画呼び出しまで問題を追跡しました。遅い場合の Android Studio トレースは次のとおりです。
そして、これが速いときのトレースです:
有罪のメソッドがandroid.view.ThreadedRenderer.draw()
であることは明らかですが、これは内部呼び出しであり、これ以上テストすることはできません。トレースから、遅いのは描画ではなく、android.view.ThreadedRenderer.updateRootDisplayList()
最終的に呼び出すandroid.widget.AbsListView.draw()
が両方のトレースで同じくらい速く終了することを理解しています。android.view.ThreadedRenderer.draw()
したがって、これを引き起こしているのは残りの部分であるに違いありません。
オンラインで検索して、ThreadedRenderer.java
クラスを見つけました
私が試したこと:
グリッドビューでハードウェア レンダリングを強制しても違いはありませんでした。
グリッドビューでソフトウェア レンダリングを強制すると、リストのスクロールが常に非常に遅くなります。
なぜこれが起こっているのでしょうか?