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

Commit d315ee93 authored by Romain Guy's avatar Romain Guy
Browse files

Fix memory leak in LocalActivityManager. Also properly removes embedded activities.

Bug #2738247

Change-Id: Ib75be22fde5f1408250947566c69174c6f248c98
parent d94e4c50
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -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<String> 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);
                }
            }
        }