Revert "Do not relaunch bg activities when application info changes"

This reverts commit 8b5afd93b6.

Reason for revert: b/186367826

Bug: 185301309
Change-Id: I7a68f1a32aff194d68af1c3ef55dc60ffbde5df9
This commit is contained in:
Louis Chang
2021-04-26 05:51:46 +00:00
parent 8b5afd93b6
commit 24af61a988
3 changed files with 23 additions and 7 deletions

View File

@@ -5961,6 +5961,20 @@ public final class ActivityThread extends ClientTransactionHandler
// Update all affected Resources objects to use new ResourcesImpl
mResourcesManager.applyNewResourceDirsLocked(ai, oldResDirs);
}
ApplicationPackageManager.configurationChanged();
// Trigger a regular Configuration change event, only with a different assetsSeq number
// so that we actually call through to all components.
// TODO(adamlesinski): Change this to make use of ActivityManager's upcoming ability to
// store configurations per-process.
final Configuration config = mConfigurationController.getConfiguration();
Configuration newConfig = new Configuration();
newConfig.assetsSeq = (config != null ? config.assetsSeq : 0) + 1;
mConfigurationController.handleConfigurationChanged(newConfig, null /* compat */);
// Preserve windows to avoid black flickers when overlays change.
relaunchAllActivities(true /* preserveWindows */, "handleApplicationInfoChanged");
}
/**

View File

@@ -184,6 +184,15 @@ public class ActivityThreadTest {
});
}
@Test
public void testHandleActivity_assetsChanged() {
relaunchActivityAndAssertPreserveWindow(activity -> {
// Relaunches all activities.
activity.getActivityThread().handleApplicationInfoChanged(
activity.getApplicationInfo());
});
}
@Test
public void testRecreateActivity() {
relaunchActivityAndAssertPreserveWindow(Activity::recreate);

View File

@@ -77,7 +77,6 @@ import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Point;
import android.net.LocalSocket;
@@ -4644,12 +4643,6 @@ public final class ProcessList {
}
});
}
// Update the global configuration and increase the assets sequence number.
Configuration currentConfig = mService.mActivityTaskManager.getConfiguration();
Configuration newConfig = new Configuration();
newConfig.assetsSeq = (currentConfig != null ? currentConfig.assetsSeq : 0) + 1;
mService.mActivityTaskManager.updateConfiguration(newConfig);
}
@GuardedBy("mService")