安卓多用户学习笔记
来源:互联网 发布:围棋编程形势判断算法 编辑:程序博客网 时间:2024/05/04 04:33
一.背景
多用户是Android4.2被引入的
二.用户创建切换删除
相关类(基于Android6.0来分析)
frameworks/base/core/java/android/os/UserManager.javaframeworks/base/services/core/java/com/android/server/pm/UserManagerService.javaframeworks/base/core/java/android/content/pm/UserInfo.javaframeworks/base/core/java/android/os/UserHandle.javaframeworks/base/core/java/com/android/server/pm/PackageManagerService.javaframeworks/base/core/java/com/android/server/wm/WindowManagerService.javaframeworks/base/core/java/com/android/server/am/ActivityManagerService.javaframeworks/base/core/java/android/os/Process.java
UserManager
UserManager
可以称为 UMS 的代理对象,它通过IUserManager mService
来与 UMS 进行进程间的通信。UserManager
是暴露出来的应用程序接口。对于普通应用程序,提供用户数查询,用户状态判断和用户序列号查询等基本功能。普通应用没有用户操作权限。
对于系统应用,UserManager
提供了创建/删除/擦除用户、用户信息获取、用户句柄获取等用户操作的接口。
这些操作均由远程调用 UMS 服务的对应方法实现。
UserManagerService
UserManagerService:继承于IUserManager.Stub,PMS初始化对象时被创建UMS对象
UserManagerService构造函数如下:
206 /**207 * Available for testing purposes.208 */209 private UserManagerService(Context context, PackageManagerService pm,210 Object installLock, Object packagesLock,211 File dataDir, File baseUserPath) {212 mContext = context;213 mPm = pm;214 mInstallLock = installLock;215 mPackagesLock = packagesLock;216 mHandler = new MainHandler();217 synchronized (mInstallLock) {218 synchronized (mPackagesLock) {219 mUsersDir = new File(dataDir, USER_INFO_DIR);220 mUsersDir.mkdirs();221 // Make zeroth user directory, for services to migrate their files to that location222 File userZeroDir = new File(mUsersDir, "0");223 userZeroDir.mkdirs();224 FileUtils.setPermissions(mUsersDir.toString(),225 FileUtils.S_IRWXU|FileUtils.S_IRWXG226 |FileUtils.S_IROTH|FileUtils.S_IXOTH,227 -1, -1);228 mUserListFile = new File(mUsersDir, USER_LIST_FILENAME);229 initDefaultGuestRestrictions();230 readUserListLocked();231 sInstance = this;232 }233 }234 }
UMS初始化过程中做了如下工作:
(1).创建用户相关目录
创建目录mUsersDir: /data/system/users
root@cancro:/data/system/users # ls00.xml1010.xmluserlist.xml
root@cancro:/data/system/users # ls00.xml1010.xmluserlist.xml
创建主用户目录userZeroDir:/data/system/users/0.该目录下存放了针对当前用户的各种设置数据,不同用户下的设置数据是独立的,即每个用户都有属于当前用户自己的设置数据
root@cancro:/data/system/users/0 # lsaccounts.dbaccounts.db-journalapp_idle_stats.xmlappwidgets.xmlpackage-restrictions.xmlregistered_servicesruntime-permissions.xmlsettings_global.xmlsettings_secure.xmlsettings_system.xmlwallpaper_info.xml
创建文件mUserListFile :userlist.xml记录当前手机所有用户id
root@cancro:/data/system/users # cat userlist.xml<?xml version='1.0' encoding='utf-8' standalone='yes' ?><users nextSerialNumber="29" version="5"> <guestRestrictions> <restrictions no_outgoing_calls="true" no_sms="true" /> </guestRestrictions> <user id="0" /> <user id="10" /></users>
(2).解析userlist.xml得到用户id,然后解析用户注册信息0.xml 10.xml创建用户信息,(x.id.xml是用户注册信息)。
保存在全局变量private final SparseArray<UserInfo> mUsers = new SparseArray<UserInfo>();中,mUsers维护所有的用户状态。
mUsers在系统启动时由/data/system/users/userlist.xml读取生成,并在运行期间动态改变。所有用户的添加、删 除操作,都最终序列化回此文件中。
0.xml示例:
root@cancro:/data/system/users # cat 0.xml<?xml version='1.0' encoding='utf-8' standalone='yes' ?><user id="0" serialNumber="0" flags="19" created="0" lastLoggedIn="1503215177716"> <name>机主</name> <restrictions /></user>
10.xml示例:
root@cancro:/data/system/users # cat 10.xml<?xml version='1.0' encoding='utf-8' standalone='yes' ?><user id="10" serialNumber="28" flags="17" created="1503294153287" lastLoggedIn="1503212178258"> <name>test</name> <restrictions no_install_unknown_sources="false" no_usb_file_transfer="false" no_debugging_features="false" /></user>
总结:UMS的构造函数主要是解析了userlist.xml文件,生成了全局的UserInfo对象。
- 安卓多用户学习笔记
- 安卓多用户笔记-用户创建
- 安卓多用户笔记-包安装
- 安卓多用户笔记-跨用户空间数据迁移
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记
- 安卓学习笔记一
- 安卓学习笔记二
- 安卓学习笔记一
- 安卓学习笔记二
- 安卓学习笔记三
- 安卓开发学习笔记
- 安卓测试学习笔记
- 计算机算法设计与分析——递归与分治策略(二)
- Google浏览器的Cookie位置
- webpack和gulp使用总结
- 蓝桥杯 四平方和
- c++实验3-个人所得税计算器
- 安卓多用户学习笔记
- Java学习之构造方法与成员方法
- c++中的构造函数--看慕课网的笔记
- xcode 真机包导入方式
- mysql常见运算符
- openjudge2815 城堡问题
- PayPal-PHP-SDK(V1.7.4)支付接口实现
- 36.动态SQL
- Android 调试桥 adb用法详解