Промената на TextField предизвикува целосен циклус на распоред

Додека гледав проблеми со перформансите во мојата апликација, открив дека секое притискање на копчето предизвикува повик до целосниот циклус наMeasure () / распоред (). Нема причина да гледам како се обидувам да ја поставам целата апликација одново; ништо не е додадено или отстрането, и ништо не ја смени големината што можам да ја видам.

Проблемот има тенденција да се случи кога распоредот е преполн и можно е долниот ред на копчињата да го надминал работ на екранот за пиксел или два.

Дали има некој искуство со ова? Дали има некој начин да се утврди зошто е активиран циклус на распоред?

Се чини дека изгледот нема да се активира ако ниту еден од TextFields на екранот не е изменет (видете Пронаоѓање на причината на барање за распоред во ViewGroup ). Дали модифицирањето на TextField секогаш предизвикува повторно распоред? Може ли да го заклучам некако за да го спречам ова? Фрустрирачки е да се мисли дека менувањето на кој било TextField на кое било место на екранот може да предизвика целосен циклус на мерка / распоред да каскада низ целата апликација;

Контејнерот е прилагодена класа на ViewGroup, но не мислам дека тоа е проблемот. Не гледам што би можел да направам поинаку за да не се повикам.

Размислувам да додадам метод „заклучување“ на мојот додаток за да спречам какви било понатамошни промени во изгледот по првичниот распоред. Тоа ќе ги подобри перформансите, но јас повеќе сакам да го решам основниот проблем.

Еве го оџакот во моментот кога се нарекува мојот метод onMeasure ():

Gridbox.onMeasure (int, int) линија: 217
Gridbox (Поглед) .мерка (int, int) линија: 8171
FrameLayout (ViewGroup) .measureChildWithMargins (View, int, int, int, int) линија: 3132 FrameLayout.onMeasure (int, int) линија: 245
FrameLayout (Поглед) .мерка (int, int) линија: 8171
PhoneWindow $ DecorView (ViewGroup) .measureChildWithMargins (View, int, int, int, int) линија: 3132
PhoneWindow $ DecorView (FrameLayout). OnMeasure (int, int) линија: 245
PhoneWindow $ DecorView (Поглед) .мерка (int, int) линија: 8171
Линија ViewRoot.performTraversals (): 801
Линија ViewRoot.handleMessage (порака): 1727
ViewRoot (Управувач) .диспрати линија за порака (порака): 99 Looper.loop () линија: 123 ActivityThread.main (Стринг []) линија: 4627
Метод. Повик за мајчин јазик (Објект, Објект [], Класа, Класа [], Класа, инт, булова) линија: не е достапна [природен метод]
Метод. Повик (Предмет, Предмет ...) линија: 521
Линија ZygoteInit $ MethodAndArgsCaller.run (): 858
Линија ZygoteInit.main (Стринг []): 616 NativeStart.main (Стринг []) линија: не е достапна [природен метод]

5
задан Community 23 May 2017 в 12:01
поделиться