Fix Screen Magnification recursive draw

When invoke the method View#setLayoutParams(), ViewRootImpl
will run method ViewRootImpl#performTraversals(). And
OnGlobalLayoutListener#onGlobalLayout() will be invoked.
When the method View#setLayoutParams() is invoked in
OnGlobalLayoutListener#onGlobalLayout(), there will be recursive
call. The view will be draw on and on. This situation happen in
Screen Magnification. It should remove the listener after
work completion.

Bug: https://issuetracker.google.com/issues/62613000

Test: use systrace when enter Screen Magnification,and view the
"traversal" times.

Change-Id: I01b1fcccb8b915ec436fb95f1d30c8ec0c0de0a9
Signed-off-by: gaochong <gaochong@xiaomi.com>
This commit is contained in:
gaochong
2017-06-14 21:51:11 +08:00
parent 46f7199cb1
commit f4372d914e

View File

@@ -98,6 +98,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends ToggleFeaturePr
videoView.setLayoutParams(videoLp);
videoView.invalidate();
videoView.start();
mVideoBackgroundView.getViewTreeObserver()
.removeOnGlobalLayoutListener(mLayoutListener);
}
};