diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 415a822e3160a..4746e12e2838f 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -845,10 +845,16 @@ class UserController implements Handler.Callback { } void scheduleStartProfiles() { - if (!mHandler.hasMessages(START_PROFILES_MSG)) { - mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG), - DateUtils.SECOND_IN_MILLIS); - } + // Parent user transition to RUNNING_UNLOCKING happens on FgThread, so it is busy, there is + // a chance the profile will reach RUNNING_LOCKED while parent is still locked, so no + // attempt will be made to unlock the profile. If we go via FgThread, this will be executed + // after the parent had chance to unlock fully. + FgThread.getHandler().post(() -> { + if (!mHandler.hasMessages(START_PROFILES_MSG)) { + mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG), + DateUtils.SECOND_IN_MILLIS); + } + }); } void startProfiles() {