在一个Android项目中需要用到OnGlobalLayoutListener去监听软键盘是否弹出,然后动态更新布局,在使用过程中发现无限循环调用onGlobalLayout()方法,应该比较影响性能,一开始以为是OnGlobalLayoutListener本身设计如此。后来一琢磨发现果然有猫腻,因为我在onGlobalLayout中动态更新view,是不是又触发了onGlobalLayout,由此陷入无限循环,严重影响性能。后来多方尝试,加了个标志位做控制就成功解决了这个问题。
private class MyLayoutListener implements OnGlobalLayoutListener {
private MyLayoutListener() {
}
// 监听键盘弹起
public void onGlobalLayout() {
if (rootView != null) {
try {
// Logger.log("GlobalLayout");
removeGlobalListener();// pang,先remove,,防止循环调用
Rect rect = new Rect();
rootView.getWindowVisibleDisplayFrame(rect);
if (rootView.getRootView().getHeight() - (rect.bottom - rect.top) > getdip(100.0f)) {// 键盘弹出
if(!isKeyboardShow){