ApplicationInfo是android.content.pm
包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;
用于保存应用的标志信息。
用法:以系统的ApplicationInfo为例
判断是否系统应用 :
if((flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM )
解读:ApplicationInfo.FLAG_SYSTEM 是二进制1左移0位,还是1,flags & 1 若等于1的话,则flags的二进制末位必须是1,
因此只有flags是奇数,对应的应用才会是系统应用。其他的属性用法类似。
看看1|2|4|8分别对应的二进制数:
1 : 0001
2 : 0010
4 : 0100
8 : 1000
注意:它们通过“或运算”可以组成1~15的数,并且不会出现两种或两种以上的相同情况。
在Android源码中,包括一些比较规范的源码中,通常会出现flag(我理解我标志位)。
可以这么认为:
a&~b: 清除标志位b;
a|b: 添加标志位b;
a&b: 取出标志位b; eg:取后三位 a&7
a^b: 取出a与b的不同部分;
(For more information,read https://blog.csdn.net/yangxi_pekin/article/details/54018849)