From a68a28640fc700624369e07582033b0f5a71572c Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Tue, 30 Jan 2018 18:22:00 -0800 Subject: [PATCH] Do not call setQuietModeEnabled from the main thread Call into startUserInBackgroundWithListener->onBeforeStartUser sometimes can be blocked for a long time if there is an ongoing dexopt operation. Instead call it from bg thread. Test: manual Bug: 72692931 Change-Id: I872c3a2baf6e5ff95aab186f7a8008afec7533d6 --- .../core/java/com/android/server/pm/UserManagerService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 92fd9041b32d3..b53d83b1291ce 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -88,6 +88,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IAppOpsService; import com.android.internal.logging.MetricsLogger; +import com.android.internal.os.BackgroundThread; import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.Preconditions; @@ -387,7 +388,9 @@ public class UserManagerService extends IUserManager.Stub { } final IntentSender target = intent.getParcelableExtra(Intent.EXTRA_INTENT); final int userHandle = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_NULL); - setQuietModeEnabled(userHandle, false, target); + // Call setQuietModeEnabled on bg thread to avoid ANR + BackgroundThread.getHandler() + .post(() -> setQuietModeEnabled(userHandle, false, target)); } };