OSDN Git Service

Revert "Add ordered broadcast when removing packages."
authorSuchi Amalapurapu <asuchitra@google.com>
Thu, 15 Apr 2010 02:17:14 +0000 (19:17 -0700)
committerSuchi Amalapurapu <asuchitra@google.com>
Thu, 15 Apr 2010 02:58:22 +0000 (19:58 -0700)
Couple of cosmetic fixes as well.

This reverts commit 0c1285fa979e8b8c170f31d0ef1b4e5d9ddcf6b1.

Conflicts:

services/java/com/android/server/PackageManagerService.java

Change-Id: Ife0f9f80525f4a41b1f8c12ffc2de62e061e7d5b

services/java/com/android/server/PackageManagerService.java

index b7ab9fe..e5b870b 100644 (file)
@@ -570,15 +570,14 @@ class PackageManagerService extends IPackageManager.Stub {
                     if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
                     PostInstallData data = mRunningInstalls.get(msg.arg1);
                     mRunningInstalls.delete(msg.arg1);
+                    boolean deleteOld = false;
 
                     if (data != null) {
                         InstallArgs args = data.args;
                         PackageInstalledInfo res = data.res;
 
                         if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
-                            res.removedInfo.sendBroadcast(false, true,
-                                    new PackageRemovedIntentReceiver(res.removedInfo.args,
-                                            res.removedInfo.args != null));
+                            res.removedInfo.sendBroadcast(false, true);
                             Bundle extras = new Bundle(1);
                             extras.putInt(Intent.EXTRA_UID, res.uid);
                             final boolean update = res.removedInfo.removedPackage != null;
@@ -593,6 +592,18 @@ class PackageManagerService extends IPackageManager.Stub {
                                         res.pkg.applicationInfo.packageName,
                                         extras, null);
                             }
+                            if (res.removedInfo.args != null) {
+                                // Remove the replaced package's older resources safely now
+                                deleteOld = true;
+                            }
+                        }
+                        // Force a gc to clear up things
+                        Runtime.getRuntime().gc();
+                        // We delete after a gc for applications  on sdcard.
+                        if (deleteOld) {
+                            synchronized (mInstallLock) {
+                                res.removedInfo.args.doPostDeleteLI(true);
+                            }
                         }
                         if (args.observer != null) {
                             try {
@@ -6065,8 +6076,7 @@ class PackageManagerService extends IPackageManager.Stub {
 
         if(res && sendBroadCast) {
             boolean systemUpdate = info.isRemovedPackageSystemUpdate;
-            info.sendBroadcast(deleteCodeAndResources, systemUpdate,
-                    new PackageRemovedIntentReceiver(info.args, deleteCodeAndResources));
+            info.sendBroadcast(deleteCodeAndResources, systemUpdate);
 
             // If the removed package was a system update, the old system packaged
             // was re-enabled; we need to broadcast this information
@@ -6079,28 +6089,18 @@ class PackageManagerService extends IPackageManager.Stub {
                 sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED, packageName, extras, null);
             }
         }
-        return res;
-    }
-
-    class PackageRemovedIntentReceiver extends IIntentReceiver.Stub {
-        boolean deleteOld;
-        InstallArgs args;
-        PackageRemovedIntentReceiver(InstallArgs args, boolean deleteOld) {
-            this.args = args;
-            this.deleteOld = deleteOld;
-        }
-        public void performReceive(Intent intent, int resultCode, String data, Bundle extras,
-                boolean ordered, boolean sticky) throws RemoteException {
-            // Force a gc to clear up things
-            Runtime.getRuntime().gc();
-            // We delete after a gc for applications  on sdcard.
-            if (deleteOld && args != null) {
-                synchronized (mInstallLock) {
-                    args.doPostDeleteLI(true);
-                }
+        // Force a gc here.
+        Runtime.getRuntime().gc();
+        // Delete the resources here after sending the broadcast to let
+        // other processes clean up before deleting resources.
+        if (info.args != null) {
+            synchronized (mInstallLock) {
+                info.args.doPostDeleteLI(deleteCodeAndResources);
             }
         }
+        return res;
     }
+
     static class PackageRemovedInfo {
         String removedPackage;
         int uid = -1;
@@ -6109,8 +6109,7 @@ class PackageManagerService extends IPackageManager.Stub {
         // Clean up resources deleted packages.
         InstallArgs args = null;
 
-        void sendBroadcast(boolean fullRemove, boolean replacing,
-                IIntentReceiver finishedReceiver) {
+        void sendBroadcast(boolean fullRemove, boolean replacing) {
             Bundle extras = new Bundle(1);
             extras.putInt(Intent.EXTRA_UID, removedUid >= 0 ? removedUid : uid);
             extras.putBoolean(Intent.EXTRA_DATA_REMOVED, fullRemove);
@@ -6118,7 +6117,7 @@ class PackageManagerService extends IPackageManager.Stub {
                 extras.putBoolean(Intent.EXTRA_REPLACING, true);
             }
             if (removedPackage != null) {
-                sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage, extras, finishedReceiver);
+                sendPackageBroadcast(Intent.ACTION_PACKAGE_REMOVED, removedPackage, extras, null);
             }
             if (removedUid >= 0) {
                 sendPackageBroadcast(Intent.ACTION_UID_REMOVED, null, extras, null);
@@ -9759,7 +9758,7 @@ class PackageManagerService extends IPackageManager.Stub {
                }
            }
            if (returnCode != PackageManager.MOVE_SUCCEEDED) {
-               processPendingMove(new MoveParams(null, observer, 0, null), returnCode);
+               processPendingMove(new MoveParams(null, observer, 0, packageName), returnCode);
            } else {
                Message msg = mHandler.obtainMessage(INIT_COPY);
                InstallArgs srcArgs = createInstallArgs(currFlags, pkg.applicationInfo.sourceDir,
@@ -9800,7 +9799,6 @@ class PackageManagerService extends IPackageManager.Stub {
                    }
                    if (returnCode == PackageManager.MOVE_SUCCEEDED) {
                        // Send resources unavailable broadcast
-                       // TODO Add an ordered broadcast receiver here.
                        sendResourcesChangedBroadcast(false, pkgList, uidArr, null);
                        // Update package code and resource paths
                        synchronized (mInstallLock) {