am 994e3990: am 2adec762: Merge "Fix issue #2621809: Kill! Kill! Kill!" into froyo

Merge commit '994e39908b167fb70883ce6c1146433e0486e86f' into kraken

* commit '994e39908b167fb70883ce6c1146433e0486e86f':
  Fix issue #2621809: Kill! Kill! Kill!
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 436bd17..8383ca3 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -14271,14 +14271,17 @@
                     }
                 }
                 if (app.curAdj >= HIDDEN_APP_MIN_ADJ) {
-                    numHidden++;
-                    if (numHidden > MAX_HIDDEN_APPS) {
-                        Slog.i(TAG, "Kill " + app.processName
-                                + " (pid " + app.pid + "): hidden #" + numHidden
-                                + " beyond limit " + MAX_HIDDEN_APPS);
-                        EventLog.writeEvent(EventLogTags.AM_KILL, app.pid,
-                                app.processName, app.setAdj, "too many background");
-                        Process.killProcess(app.pid);
+                    if (!app.killedBackground) {
+                        numHidden++;
+                        if (numHidden > MAX_HIDDEN_APPS) {
+                            Slog.i(TAG, "Kill " + app.processName
+                                    + " (pid " + app.pid + "): hidden #" + numHidden
+                                    + " beyond limit " + MAX_HIDDEN_APPS);
+                            EventLog.writeEvent(EventLogTags.AM_KILL, app.pid,
+                                    app.processName, app.setAdj, "too many background");
+                            app.killedBackground = true;
+                            Process.killProcess(app.pid);
+                        }
                     }
                 }
             } else {
diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java
index 28195ce..7620468 100644
--- a/services/java/com/android/server/am/ProcessRecord.java
+++ b/services/java/com/android/server/am/ProcessRecord.java
@@ -64,6 +64,7 @@
     boolean setIsForeground;    // Running foreground UI when last set?
     boolean foregroundServices; // Running any services that are foreground?
     boolean bad;                // True if disabled in the bad process list
+    boolean killedBackground;   // True when proc has been killed due to too many bg
     IBinder forcingToForeground;// Token that is forcing this process to be foreground
     int adjSeq;                 // Sequence id for identifying repeated trav
     ComponentName instrumentationClass;// class installed to instrument app
@@ -174,6 +175,9 @@
         pw.print(prefix); pw.print("persistent="); pw.print(persistent);
                 pw.print(" removed="); pw.print(removed);
                 pw.print(" persistentActivities="); pw.println(persistentActivities);
+        if (killedBackground) {
+            pw.print(prefix); pw.print("killedBackground="); pw.println(killedBackground);
+        }
         if (debugging || crashing || crashDialog != null || notResponding
                 || anrDialog != null || bad) {
             pw.print(prefix); pw.print("debugging="); pw.print(debugging);