У термінальному додатку на Android введіть (вимагає кореневого доступу):
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.
Як було сказано, він просто призупиняє всі дії, пов’язані з цим обліковим записом користувача, тому щоразу, коли буде передбачено явний запуск або перемикання, ваш сеанс поновлюється, а не починається з нуля.
Для підтвердження того, що користувач дійсно призупинився або не працює, дивіться мою відповідь на тему Як дізнатися поточне ім’я користувача / ідентифікатор від 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процеси, що працюють. Щоб перевірити, чи вони зупинені, я спробував запустити скрипт оболонки в терміналі для другого користувача. Сценарій циклічно повторює оператор ехо (що відображає секунду). Після запуску цього скрипту, використовуючиam stop-user 10команду, чекаючи 5 хвилин і повторного запуску 2-го сеансу користувача, я можу сказати, що сценарій не зупинений. Це бігало весь час.