Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8b0f11a authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Fix memory leak in LocalActivityManager. Also properly removes embedded...

Merge "Fix memory leak in LocalActivityManager. Also properly removes embedded activities. Bug #2738247"
parents 26ae7875 d315ee93
Loading
Loading
Loading
Loading
+6 −11
Original line number Original line Diff line number Diff line
@@ -20,13 +20,11 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo;
import android.os.Binder;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
import android.util.Config;
import android.util.Log;
import android.util.Log;
import android.view.Window;
import android.view.Window;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map;


/**
/**
@@ -38,7 +36,7 @@ import java.util.Map;
 */
 */
public class LocalActivityManager {
public class LocalActivityManager {
    private static final String TAG = "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.
    // Internal token for an Activity being managed by LocalActivityManager.
    private static class LocalActivityRecord extends Binder {
    private static class LocalActivityRecord extends Binder {
@@ -351,7 +349,7 @@ public class LocalActivityManager {
    }
    }


    private Window performDestroy(LocalActivityRecord r, boolean finish) {
    private Window performDestroy(LocalActivityRecord r, boolean finish) {
        Window win = null;
        Window win;
        win = r.window;
        win = r.window;
        if (r.curState == RESUMED && !finish) {
        if (r.curState == RESUMED && !finish) {
            performPause(r, finish);
            performPause(r, finish);
@@ -385,7 +383,8 @@ public class LocalActivityManager {
        if (r != null) {
        if (r != null) {
            win = performDestroy(r, finish);
            win = performDestroy(r, finish);
            if (finish) {
            if (finish) {
                mActivities.remove(r);
                mActivities.remove(id);
                mActivityArray.remove(r);
            }
            }
        }
        }
        return win;
        return win;
@@ -446,10 +445,8 @@ public class LocalActivityManager {
     */
     */
    public void dispatchCreate(Bundle state) {
    public void dispatchCreate(Bundle state) {
        if (state != null) {
        if (state != null) {
            final Iterator<String> i = state.keySet().iterator();
            for (String id : state.keySet()) {
            while (i.hasNext()) {
                try {
                try {
                    final String id = i.next();
                    final Bundle astate = state.getBundle(id);
                    final Bundle astate = state.getBundle(id);
                    LocalActivityRecord r = mActivities.get(id);
                    LocalActivityRecord r = mActivities.get(id);
                    if (r != null) {
                    if (r != null) {
@@ -462,9 +459,7 @@ public class LocalActivityManager {
                    }
                    }
                } catch (Exception e) {
                } catch (Exception e) {
                    // Recover from -all- app errors.
                    // Recover from -all- app errors.
                    Log.e(TAG,
                    Log.e(TAG, "Exception thrown when restoring LocalActivityManager state", e);
                          "Exception thrown when restoring LocalActivityManager state",
                          e);
                }
                }
            }
            }
        }
        }