在查看我的应用程序中的性能问题时,我发现每次按下按钮都会触发对完整的onMeasure()/ layout()循环的调用.没有理由我可以尝试重新布置整个应用程序; 没有添加或删除任何内容,没有任何改变我看到的大小.
当布局非常拥挤时,问题往往会发生,并且底部的按钮行可能超出屏幕边缘一两个像素.
有没有人有这方面的经验?有没有什么办法,以确定为什么布局周期被触发?
如果屏幕上没有任何TextFields被修改,似乎不会触发布局(请参阅在ViewGroup中查找布局请求的原因).修改TextField是否总是触发重新布局?我可以以某种方式锁定它以防止这种情况吗?令人沮丧的是,认为在屏幕上的任何地方更改任何TextField都会导致整个测量/布局周期级联整个应用程序; 这是对我的表现的屠杀.
容器是一个自定义ViewGroup类,但我不认为这是问题所在.我不知道我可以做些什么来阻止它被调用.
我正在考虑在我的小部件中添加"锁定"方法,以防止在初始布局后进行任何进一步的布局更改.这将提高性能,但我宁愿解决潜在的问题.
这是我调用onMeasure()方法时的堆栈:
Gridbox.onMeasure(int,int)行:217
Gridbox(View).measure(int,int)行:8171
FrameLayout(ViewGroup).measureChildWithMargins(View,int,int,int,int)行:3132 FrameLayout.onMeasure(int ,int)行:245
FrameLayout(View).measure(int,int)行:8171
PhoneWindow $ DecorView(ViewGroup).measureChildWithMargins(View,int,int,int,int)行:3132
PhoneWindow $ DecorView(FrameLayout).onMeasure (int,int)行:245
PhoneWindow $ DecorView(View).measure(int,int)行:8171
ViewRoot.performTraversals()行:801
ViewRoot.handleMessage(消息)行:1727
ViewRoot(Handler).dispatchMessage(Message) line:99 Looper.loop()line:123 ActivityThread.main(String [])line:4627
Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:not available [native方法]
Method.invoke(Object,Object ...)行:521
ZygoteInit $ MethodAndArgsCaller.run()行:858
ZygoteInit.main(String [])行:616 NativeStart.main(String [])行:不可用[本地方法]