У термінальному додатку на 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-го сеансу користувача, я можу сказати, що сценарій не зупинений. Це бігало весь час.