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
This commit is contained in:
Fyodor Kupolov
2018-01-30 18:22:00 -08:00
parent d21e8d8b7b
commit a68a28640f

View File

@@ -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));
}
};