Существует возможность переключения между пользователями, но нет возможности выйти из активного пользовательского сеанса. Фоновые приложения и службы для неактивных пользователей (после входа в систему и выхода из нее) продолжают работать, разряжая батарею.
Я думаю, что единственный способ - перезагрузить устройство и не входить в систему.
Итак, есть ли способ, которым владелец может заставить последующих неактивных пользователей выйти из своей сессии? У меня есть доступ суперпользователя к владельцу с android-5.0.2
.
В терминальном приложении на 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.
Как сказано, он просто приостанавливает все действия, связанные с этой учетной записью пользователя, поэтому всякий раз, когда предоставляется явный запуск или переключение, ваш сеанс возобновляется, а не начинается с нуля.
Для подтверждения того, что пользователь действительно приостановил работу или не работает, см. Мой ответ на Как узнать текущее имя / идентификатор пользователя из 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 минут и повторного запуска сеанса второго пользователя я могу сказать, что скрипт не остановлен. Он работал все время.adb install -r app.apk
. Не знаю, в этом ли дело.android-5.1.1
и она сработала, как указано. Я не проверял часть сценария, но при выпуске am stop-user 10
все процессы 2-го пользователя были убиты и не указаны в команде Settings > Apps
или с ней. ps
Так оно и есть, но на android-5.0.2
данный момент либо глючит эта команда, либо такая функциональность не реализована в той версии, я думаю. Но у 5.1 есть более невыносимые баги, на которые я пока не перейду. Спасибо :)
Джонатан Кросс