1

画面に一連の複雑なビューが表示されており、実行時にビューを動的に切り替える必要があります。これは、ビューを削除して新しいビューを追加することによって行います (場合によっては、可視性を設定するだけです)。

ここでの問題は、ビューのレンダリングに非常に長い時間がかかることです (7 ~ 8 秒を超えます)。

メソッド内にタイムスタンプを入れましたが、それらはすべて非常に迅速に返されるようです。しかし、最後のメソッドが返された後でも、ビューはレンダリングされず、実際に表示されるまで待つ必要があります。その後、UI はかなり反応しなくなり、ANRかなり頻繁に反応します。

なぜこんなに遅いのか、誰か指摘できますか?

を使用して、実行時にファイル システムから多くの画像をロードしていますDrawable.createFromPath()。これが問題でしょうか?

4

2 に答える 2

1

私は同じ解決策を見つけ、同様の問題に直面している人のためにそれを投稿しています。問題は、ビューの深いネストが原因でした。レイアウトがかなり複雑だったため、ビューはかなり深くネストされていました。そして、特定のレベル14〜15を過ぎると、パフォーマンスが大幅に低下し始めます。一部のスタブレイアウト(プレースホルダーなど)をマージすると、パフォーマンスが大幅に向上しました。階層ビューアは、この問題のデバッグに非常に役立ちました。さらにいくつかの観察結果は次のとおりです。1。ネストされたときの相対レイアウトはかなり遅いですが、LinearLayoutsはそれほど遅くありません。2.ソフトキーボードは、ダイアログ内で使用したり、深くネストされた相対レイアウトからトリガーしたりすると動作が遅くなります(階層は主に相対レイアウトで構成されます)。

于 2012-06-29T07:34:45.763 に答える
0

アプリケーションが遅くなる理由の1つは、UIスレッドで時間のかかる非UIアクティビティを実行する場合です。コードを注意深く調べて、どのアクティビティに時間がかかりAsyncTask、これらのアクティビティを実行するために使用できるかを判断することをお勧めします。

詳細については、次のリンクを参照してください: http: //developer.android.com/reference/android/os/AsyncTask.html

于 2012-06-10T18:53:58.457 に答える