UserHandle.java学习小结
2014-02-24 17:10
369 查看
在Android 4.2.2的代码中看到现在支持多用户了,下面是证据:
public static final boolean MU_ENABLED = true;
在多用户情形下,就会有多个user(有点废话)。要理解多用户,弄清楚三个int值很关键,分别是uid、appid和user id。
这里的user id和uid容易弄混,我的理解是user id代表的就是当前是哪个user,在不支持多用户的系统中,当然这个值是唯一的,应该是0,但现在不一样了,不过本人还没有碰到它不为0的时候,我所见的大多时候它仍然是0,似乎跟单用户没有任何差别,或许以后会不一样的,这里是为以后扩展预留的。
uid = user id * 100,000 + appid(其中,0<=appid<100,000)
这个公式或许能有助于我们理解这三者的关系。下面这三个方法就不难理解了:
另有几个uid的范围:
user id 为0的user:[0,99 999]
application appid:[10 000, 19 999]
shared application appid:[50 000, 59 999]
isolated appid:[99 000, 99 999]
system appid似乎是从1000开始,那猜测应该是到9 999结束。
有多个范围貌似没有被用到啊。
这个类有一个关键的成员变量:final int mHandle;在被初始化后不能修改,且这个类只有一个实例化方法。
它自己创建了三个实例:
ALL mHandle=-1
CURRENT mHandle=-2
CURRENT_OR_SELF mHandle=-3
OWNER mHandle=0
public static final boolean MU_ENABLED = true;
在多用户情形下,就会有多个user(有点废话)。要理解多用户,弄清楚三个int值很关键,分别是uid、appid和user id。
这里的user id和uid容易弄混,我的理解是user id代表的就是当前是哪个user,在不支持多用户的系统中,当然这个值是唯一的,应该是0,但现在不一样了,不过本人还没有碰到它不为0的时候,我所见的大多时候它仍然是0,似乎跟单用户没有任何差别,或许以后会不一样的,这里是为以后扩展预留的。
uid = user id * 100,000 + appid(其中,0<=appid<100,000)
这个公式或许能有助于我们理解这三者的关系。下面这三个方法就不难理解了:
PER_USER_RANGE = 100,000 //已知 uid,求user id public static final int getUserId(int uid) { if (MU_ENABLED) { return uid / PER_USER_RANGE; } else { return 0; } } //已知uid,求appid public static final int getAppId(int uid) { return uid % PER_USER_RANGE; } //已知user id,appid,求uid public static final int getUid(int userId, int appId) { if (MU_ENABLED) { return userId * PER_USER_RANGE + (appId % PER_USER_RANGE); } else { return appId; } } //代码通过user id判断是否是同一个用户;通过appid判断是否是同一个app。 public static final boolean isSameUser(int uid1, int uid2) { return getUserId(uid1) == getUserId(uid2); } public static final boolean isSameApp(int uid1, int uid2) { return getAppId(uid1) == getAppId(uid2); }
另有几个uid的范围:
user id 为0的user:[0,99 999]
application appid:[10 000, 19 999]
shared application appid:[50 000, 59 999]
isolated appid:[99 000, 99 999]
system appid似乎是从1000开始,那猜测应该是到9 999结束。
有多个范围貌似没有被用到啊。
这个类有一个关键的成员变量:final int mHandle;在被初始化后不能修改,且这个类只有一个实例化方法。
它自己创建了三个实例:
ALL mHandle=-1
CURRENT mHandle=-2
CURRENT_OR_SELF mHandle=-3
OWNER mHandle=0
相关文章推荐
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
- java:IO流学习小结
- 值得推荐的JAVA学习路线_JAVA学习方法小结
- java:IO流学习小结
- JAVA学习第六天-小结
- 学习Java的小结1
- 【Java学习笔记之二十】final关键字在Java继承中的用法小结
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
- java:IO流学习小结
- JavaSSM学习小结(3):Service层开发
- Java学习笔记-集合类小结
- Java学习小结
- 阿里巴巴Java开发手册学习小结4-关于集合处理
- java:IO流学习小结
- java语言学习历程小结(四)
- Java中的equals学习小结
- 黑马程序员 【】java学习之路——枚举小结
- java:IO流学习小结
- Java学习笔记(二十七):关于System.getProperty("user.dir")