Если устройство поддерживает нескольких пользователей , его приложения должны быть осведомлены об этих отдельных пользователях.
В некоторых приложениях некоторые компоненты должны работать как одиночки и могут принимать запросы от любого пользователя. В настоящее время эту функцию могут использовать только системные приложения.
Этот объект:
- Сохраняет ресурсы
- Управляет одним или несколькими общими ресурсами между пользователями.
- Снижает нагрузку на сеть за счет использования одного подключения к серверу.
На диаграмме ниже показан поток разрешений для нескольких пользователей.

Рисунок 1. Разрешения нескольких пользователей
Включить одноэлементный компонент
 Чтобы определить приложение как синглтон, добавьте android:singleUser="true" к своей службе, получателю или поставщику в манифесте Android.
Система создает экземпляр этого компонента в процессе, работающем только от имени пользователя 0. Любые запросы на подключение к этому поставщику или службе или на трансляцию этому получателю от любого пользователя перенаправляются в процесс пользователя 0. Если это единственный компонент в вашем приложении, запускается только один экземпляр вашего приложения.
Действия в вашем пакете по-прежнему запускаются в отдельном процессе для каждого пользователя, при этом UID находится в диапазоне UID этого пользователя (например, 1010034).
Взаимодействуйте с пользователями
Установить разрешения
Эти разрешения необходимы:
INTERACT_ACROSS_USERS (signature|system) INTERACT_ACROSS_USERS_FULL (signature)
Используйте API
Используйте следующие API, чтобы приложения знали о нескольких пользователях.
-  Извлеките дескриптор пользователя из входящих вызовов Binder:-  int userHandle = UserHandle.getCallingUserId()
 
-  
-  Используйте новые, защищенные API для запуска сервисов, активностей, трансляций конкретному пользователю:-  Context.startActivityAsUser(Intent, UserHandle)
-  Context.bindServiceAsUser(Intent, …, UserHandle)
-  Context.sendBroadcastAsUser(Intent, … , UserHandle)
-  Context.startServiceAsUser(Intent, …, UserHandle)
 UserHandleможет быть явным пользователем или одним из специальных дескрипторов:UserHandle.CURRENTилиUserHandle.ALL.CURRENTуказывает на пользователя, который в данный момент находится на переднем плане. ИспользуйтеALL, если хотите отправить широковещательную рассылку всем пользователям.
-  
-  Общайтесь с компонентами в вашем приложении: (INTERACT_ACROSS_USERS)или с компонентами в других приложениях:(INTERACT_ACROSS_USERS_FULL)
-  Возможно, вам придется создать прокси-компоненты, которые запускаются в процессе пользователя и затем получают доступ к компоненту singleUserу пользователя 0.
-  Запрашивайте пользователей и их дескрипторы с помощью нового системного сервиса UserManager:-  UserManager.getUsers()
-  UserManager.getUserInfo()
-  UserManager.supportsMultipleUsers()
-  UserManager.getUserSerialNumber(int userHandle)— непереработанный номер, соответствующий дескриптору пользователя.
-  UserManager.getUserHandle(int serialNumber)
-  UserManager.getUserProfiles()— возвращает коллекцию собственных и управляемых профилей, если таковые имеются.
 
-  
- Зарегистрируйтесь, чтобы прослушивать отдельных или всех пользователей и обратные вызовы с помощью новых API на ContentObserver, PackageMonitor, BroadcastReceiver, которые предоставляют дополнительную информацию о том, какой пользователь вызвал обратный вызов.
Службы в нескольких пользователях или профилях
Не всем службам необходимо запускать экземпляр в другом пользовательском или рабочем профиле. Если вашей системной службе необходимо запускаться только от имени пользователя 0, отключите компоненты службы при запуске под другими пользователями, чтобы сохранить ресурсы. В следующем примере показано, как это можно сделать в точках входа вашего сервиса:
// Add on all entry points such as boot_completed or other manifest-listed receivers and providers
if (!UserManager.isSystemUser()) {
    // Disable the service
    ComponentName targetServiceName = new ComponentName(this, TargetService.class);
    context.getPackageManager().setComponentEnabledSetting(
        targetServiceName, COMPONENT_ENABLED_STATE_DISABLED, 0);
}
 В этом примере также можно использовать PackageManager.setApplicationEnabledSetting() для отключения всего приложения.
