From d315ee93c678a109b57fcad4ba1456e9b5244648 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Thu, 3 Jun 2010 11:03:18 -0700 Subject: [PATCH] Fix memory leak in LocalActivityManager. Also properly removes embedded activities. Bug #2738247 Change-Id: Ib75be22fde5f1408250947566c69174c6f248c98 --- core/java/android/app/LocalActivityManager.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/core/java/android/app/LocalActivityManager.java b/core/java/android/app/LocalActivityManager.java index be8f413d63a8f..524de6fc3fa1e 100644 --- a/core/java/android/app/LocalActivityManager.java +++ b/core/java/android/app/LocalActivityManager.java @@ -20,13 +20,11 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Binder; import android.os.Bundle; -import android.util.Config; import android.util.Log; import android.view.Window; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; /** @@ -38,7 +36,7 @@ import java.util.Map; */ public class LocalActivityManager { private static final String TAG = "LocalActivityManager"; - private static final boolean localLOGV = false || Config.LOGV; + private static final boolean localLOGV = false; // Internal token for an Activity being managed by LocalActivityManager. private static class LocalActivityRecord extends Binder { @@ -351,7 +349,7 @@ public class LocalActivityManager { } private Window performDestroy(LocalActivityRecord r, boolean finish) { - Window win = null; + Window win; win = r.window; if (r.curState == RESUMED && !finish) { performPause(r, finish); @@ -385,7 +383,8 @@ public class LocalActivityManager { if (r != null) { win = performDestroy(r, finish); if (finish) { - mActivities.remove(r); + mActivities.remove(id); + mActivityArray.remove(r); } } return win; @@ -446,10 +445,8 @@ public class LocalActivityManager { */ public void dispatchCreate(Bundle state) { if (state != null) { - final Iterator i = state.keySet().iterator(); - while (i.hasNext()) { + for (String id : state.keySet()) { try { - final String id = i.next(); final Bundle astate = state.getBundle(id); LocalActivityRecord r = mActivities.get(id); if (r != null) { @@ -462,9 +459,7 @@ public class LocalActivityManager { } } catch (Exception e) { // Recover from -all- app errors. - Log.e(TAG, - "Exception thrown when restoring LocalActivityManager state", - e); + Log.e(TAG, "Exception thrown when restoring LocalActivityManager state", e); } } }