最近、アプリの重大なパフォーマンスの問題に気付きました。私は基本的に次のレイアウトを持っています...
説明
要するに、ページとしてViewPager
3 を保持する a がありRelativeLayout
ます。各ページ内には多数の がありTextView
ます。最近、オートコンプリート用の簡単な SQL クエリを実行するためにEditText
を入力すると、多くの遅延が発生することに気付きました。TextWatcher
私の HTC One M8 は、テキストを入力するときに途切れたり遅れたりしますが、約 7 ミリ秒しかかからないクエリを測定したので、遅いのはクエリではないことがわかります。
メソッド プロファイリング、Systrace、および昔ながらのLog
デバッグを使用した結果、文字を入力するたびに、EditText
約1,700 の呼び出しが A、B、および C内のonMeasure
で行われていることがわかりました。累積すると、全体で約 15 個の独立した しかありません。ページ。通常は1 回か 2 回ではなく、それぞれが何百回も呼び出されていることに気付きました。TextView
RelativeLayout
TextView
onMeasure
質問
ページ B に を入力すると、ページ A と C の他の も「再測定」される
理由がわかりません。さらに重要なことに、なぜが頻繁に呼び出されるのかについて洞察を持っている人はいますか? そして、への呼び出しの数を大幅に減らす解決策を知っている人はいますか?EditText
TextView
onMeasure
onMeasure
詳細
これは役立つかもしれません:onMeasure
呼び出しRelativeLayout
の伝播onMeasure
がViewPager
.