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

Commit 7ac5a9ac authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android Git Automerger
Browse files

am 4bc5909a: Merge "Fix issue #11050678: Large memory leak in ActivityStack" into klp-dev

* commit '4bc5909a':
  Fix issue #11050678: Large memory leak in ActivityStack
parents ae828e86 4bc5909a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -3193,6 +3193,7 @@ public final class ActivityManagerService extends ActivityManagerNative
            if (task.userId == tr.userId
                    && ((task.affinity != null && task.affinity.equals(tr.affinity))
                    || (task.intent != null && task.intent.filterEquals(tr.intent)))) {
                tr.disposeThumbnail();
                mRecentTasks.remove(i);
                i--;
                N--;
@@ -3204,7 +3205,7 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
        }
        if (N >= MAX_RECENT_TASKS) {
            mRecentTasks.remove(N-1);
            mRecentTasks.remove(N-1).disposeThumbnail();
        }
        mRecentTasks.add(0, task);
    }
@@ -6738,6 +6739,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    }
    private void cleanUpRemovedTaskLocked(TaskRecord tr, int flags) {
        tr.disposeThumbnail();
        mRecentTasks.remove(tr);
        mStackSupervisor.removeTask(tr);
        final boolean killProcesses = (flags&ActivityManager.REMOVE_TASK_KILL_PROCESS) != 0;
+10 −0
Original line number Diff line number Diff line
@@ -128,6 +128,16 @@ final class TaskRecord extends ThumbnailHolder {
        }
    }

    void disposeThumbnail() {
        super.disposeThumbnail();
        for (int i=mActivities.size()-1; i>=0; i--) {
            ThumbnailHolder thumb = mActivities.get(i).thumbHolder;
            if (thumb != this) {
                thumb.disposeThumbnail();
            }
        }
    }

    ActivityRecord getTopActivity() {
        for (int i = mActivities.size() - 1; i >= 0; --i) {
            final ActivityRecord r = mActivities.get(i);
+5 −0
Original line number Diff line number Diff line
@@ -21,4 +21,9 @@ import android.graphics.Bitmap;
public class ThumbnailHolder {
    Bitmap lastThumbnail;         // Last thumbnail captured for this item.
    CharSequence lastDescription; // Last description captured for this item.

    void disposeThumbnail() {
        lastThumbnail = null;
        lastDescription = null;
    }
}