В терминальном приложении на Android введите (требуется root-доступ):
su
am stop-user USER_ID
Например, для гостевого пользователя USER_IDв моем устройстве есть 11команда am stop-user 11.
am stop-user не обрабатывает множественный ввод, поэтому вы должны выполнить команду для каждого вторичного пользователя, которого вы хотите приостановить.
Это немного отличается от перезапуска устройства. Если вы проверите amиспользование, вы увидите,
am stop-user: stop execution of USER_ID, not allowing it to run any code until a later explicit start or switch to it.
Как уже было сказано, он просто приостанавливает все действия, связанные с этой учетной записью пользователя, поэтому всякий раз, когда предоставляется явный запуск или переключение, сеанс возобновляется, а не начинается с нуля.
Для подтверждения того, что пользователь действительно сделал паузу или не работает, см. Мой ответ для Как узнать текущее имя пользователя / ID из ADB ?
Вкратце, pm list usersили dumpsys activityскажу вам, является ли пользователь RUNNINGили SHUTDOWN. Последняя команда лучше. Если пользовательский сеанс действительно остановлен am stop-user, вы увидите mState=SHUTDOWNэтого пользователя. Однако, если пользователь не был активирован ни разу после перезагрузки, вы не увидите ни одной его записи.
am stopuser 10показала только то,pm list usersчто пользователь не работает. Я проверилadb shell psпослеam stop-user 10и могу найтиu10_axxпроцессы запущены. Чтобы проверить, остановлены ли они, я попытался запустить сценарий оболочки в терминале 2-го пользователя. Скрипт повторяет оператор echo каждую секунду (отображая секунду). После запуска этого сценария, использованияam stop-user 10команды, ожидания 5 минут и перезапуска второго сеанса пользователя, я могу сказать, что сценарий не остановлен. Это бежало в течение всего времени.