Merge "Detach children when stopping app." into pi-dev
This commit is contained in:
@@ -700,15 +700,9 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
|
||||
mIsCreating = false;
|
||||
if (mSurfaceControl != null && !mSurfaceCreated) {
|
||||
mSurface.release();
|
||||
// If we are not in the stopped state, then the destruction of the Surface
|
||||
// represents a visual change we need to display, and we should go ahead
|
||||
// and destroy the SurfaceControl. However if we are in the stopped state,
|
||||
// we can just leave the Surface around so it can be a part of animations,
|
||||
// and we let the life-time be tied to the parent surface.
|
||||
if (!mWindowStopped) {
|
||||
mSurfaceControl.destroy();
|
||||
mSurfaceControl = null;
|
||||
}
|
||||
|
||||
mSurfaceControl.destroy();
|
||||
mSurfaceControl = null;
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
|
||||
@@ -1626,6 +1626,10 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
|
||||
if (parent != null) {
|
||||
parent.onActivityStateChanged(this, state, reason);
|
||||
}
|
||||
|
||||
if (state == STOPPING) {
|
||||
mWindowContainerController.notifyAppStopping();
|
||||
}
|
||||
}
|
||||
|
||||
ActivityState getState() {
|
||||
|
||||
@@ -671,6 +671,17 @@ public class AppWindowContainerController
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyAppStopping() {
|
||||
synchronized(mWindowMap) {
|
||||
if (mContainer == null) {
|
||||
Slog.w(TAG_WM, "Attempted to notify stopping on non-existing app token: "
|
||||
+ mToken);
|
||||
return;
|
||||
}
|
||||
mContainer.detachChildren();
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyAppStopped() {
|
||||
synchronized(mWindowMap) {
|
||||
if (mContainer == null) {
|
||||
|
||||
@@ -913,12 +913,16 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
|
||||
// try and clean up it's child surfaces. We need to prevent this from
|
||||
// happening, so we sever the children, transfering their ownership
|
||||
// from the client it-self to the parent surface (owned by us).
|
||||
detachChildren();
|
||||
|
||||
mPendingRelaunchCount++;
|
||||
}
|
||||
|
||||
void detachChildren() {
|
||||
for (int i = mChildren.size() - 1; i >= 0; i--) {
|
||||
final WindowState w = mChildren.get(i);
|
||||
w.mWinAnimator.detachChildren();
|
||||
}
|
||||
|
||||
mPendingRelaunchCount++;
|
||||
}
|
||||
|
||||
void finishRelaunching() {
|
||||
|
||||
Reference in New Issue
Block a user