OSDN Git Service

am cf7d2d95: Merge "[ActivityManager] Avoid orphan ContentProviderRecord."
authorOlawale Ogunwale <ogunwale@google.com>
Fri, 24 Apr 2015 18:11:29 +0000 (18:11 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Fri, 24 Apr 2015 18:11:29 +0000 (18:11 +0000)
* commit 'cf7d2d95adb358a628c2622b43a999d3ab784406':
  [ActivityManager] Avoid orphan ContentProviderRecord.

1  2 
services/core/java/com/android/server/am/ActivityManagerService.java

@@@ -57,7 -57,6 +57,7 @@@ import android.util.ArrayMap
  import android.util.ArraySet;
  import android.util.SparseIntArray;
  
 +import android.view.Display;
  import com.android.internal.R;
  import com.android.internal.annotations.GuardedBy;
  import com.android.internal.app.IAppOpsService;
@@@ -5817,17 -5816,20 +5817,20 @@@ public final class ActivityManagerServi
              if (app.isolated) {
                  mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
              }
-             app.kill(reason, true);
-             handleAppDiedLocked(app, true, allowRestart);
-             removeLruProcessLocked(app);
+             boolean willRestart = false;
              if (app.persistent && !app.isolated) {
                  if (!callerWillRestart) {
-                     addAppLocked(app.info, false, null /* ABI override */);
+                     willRestart = true;
                  } else {
                      needRestart = true;
                  }
              }
+             app.kill(reason, true);
+             handleAppDiedLocked(app, willRestart, allowRestart);
+             if (willRestart) {
+                 removeLruProcessLocked(app);
+                 addAppLocked(app.info, false, null /* ABI override */);
+             }
          } else {
              mRemovedProcesses.add(app);
          }
      }
  
      @Override
 -    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
 -            throws RemoteException {
 +    public int getActivityDisplayId(IBinder activityToken) throws RemoteException {
          synchronized (this) {
              ActivityStack stack = ActivityRecord.getStackLocked(activityToken);
 -            if (stack != null) {
 -                return stack.mActivityContainer;
 +            if (stack != null && stack.mActivityContainer.isAttachedLocked()) {
 +                return stack.mActivityContainer.getDisplayId();
              }
 -            return null;
 +            return Display.DEFAULT_DISPLAY;
          }
      }