Fix display list issue that was crashing an external app.

The app was removing a View whilst in its onDraw() method. This meant
that we asked it for its display list and it invalidated that display list
(by removing itself) before it returned from onDraw(). We later attempted to
draw that invalid display list into its parent nad died in native code.

The fix is to check the state of the display list after the call to getDisplayList()
and to avoid doing further work with it if it's invalid.

Change-Id: I14a342b4fe79c8dce2626ff61237b447040e7f42
This commit is contained in:
Chet Haase
2011-09-26 13:49:33 -07:00
parent d359b575f7
commit 6e6db61809

View File

@@ -2824,6 +2824,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (hasDisplayList) {
displayList = child.getDisplayList();
if (!displayList.isValid()) {
// Uncommon, but possible. If a view is removed from the hierarchy during the call
// to getDisplayList(), the display list will be marked invalid and we should not
// try to use it again.
displayList = null;
hasDisplayList = false;
}
}
if (hasNoCache) {