1

20 個のアイテム (WebView) を LinearLayout にロードしています。それらのロード中に、LinearLayout を非表示にして作業中のユーザーにフィードバックを提供する ProgressBar を表示しています。

問題は、プログレス ホイールがフリーズし、Choreographer から LogCat に「フレームがスキップされました。アプリケーションがメイン スレッドで処理を実行しすぎている可能性があります」という警告が表示されることです。

この問題を回避するために、私は実際に、20 項目すべてで LinearLayout を使用し、アダプターで ListView を使用することから変更しようとしました。WebView のリサイクルの問題に遭遇したため、リサイクルを排除し、実際に 20 個のアイテムの配列を使用しました。ListView がアイテムをロードする必要があるたびに、以前に膨張していた場合はその配列からロードされます。

次に、ListView は必要なときにのみ WebView をロードするため、指定された項目までスクロールできないという問題が発生しました。WebView の高さが異なるため、必要なスクロール量を計算できません。

結論として、LinearLayout の実装に戻り、すべての WebView を追加する必要がありました。

この問題の解決策はありますか? そうでない場合は、アニメーション化された ProgressBar の代わりに "Loading..." TextView のみを表示することを考えています。

ところで、誰かが尋ねる前に、エミュレータではなく Nexus 4 を使用してアプリをテストしており、UI スレッドでデータベース アクセスを行っていません。

前もって感謝します。

4

1 に答える 1

1

AWebViewは重くて高価なオブジェクトです。ウィンドウに新しいオブジェクトを追加するたびに、WebView初期化、測定、および配置する必要があります。これがフレームをスキップする原因です。traceview または systrace を使用して、時間を費やしている場所を確認できます。

于 2013-08-19T18:26:03.497 に答える