Выход из сеанса на устройстве с несколькими пользователями?

Существует возможность переключения между пользователями, но нет возможности выйти из активного пользовательского сеанса. Фоновые приложения и службы для неактивных пользователей (после входа в систему и выхода из нее) продолжают работать, разряжая батарею.

Я думаю, что единственный способ - перезагрузить устройство и не входить в систему.

Итак, есть ли способ, которым владелец может заставить последующих неактивных пользователей выйти из своей сессии? У меня есть доступ суперпользователя к владельцу с android-5.0.2.

Нет ли метода графического интерфейса?

Ответы (1)

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