我最近注意到我的应用程序存在严重的性能问题。我基本上有以下布局......
描述
简而言之,有一个ViewPager
将 3 RelativeLayout
s 保存为页面的 a。在每个页面内都有一些TextView
s。我最近注意到,当我在上面输入以执行快速 SQL 查询以自动完成时EditText
,会出现很多延迟。TextWatcher
当我输入文本时,我的 HTC One M8 卡顿和滞后,但我知道查询速度并不慢,因为我测量查询只需要大约 7 毫秒。
我使用了方法分析、Systrace 和普通的旧Log
调试,并得出结论,每次我在 A、B 和 C 中的 s上进行的EditText
大约1,700次调用中键入一个字符。累积起来,只有大约 15 个独立的 s页面。我注意到每个都被调用了数百次,而不是像通常那样只调用一次或两次。onMeasure
TextView
RelativeLayout
TextView
onMeasure
问题
我不知道为什么EditText
在页面 B 中输入会导致TextView
页面 A 和 C 中的其他 s 也被“重新测量”。更重要的是,是否有人对为什么onMeasure
如此频繁地被调用有见解?而且,有谁知道显着减少调用次数的解决方案onMeasure
?
细节
这可能会有所帮助:我实际上能够onMeasure
通过删除 2 将调用次数减少到大约 900,RelativeLayout
这可能表明onMeasure
调用的传播开始于ViewPager
.