关于Android源码中|= (m & STATIC_VALUE) !=0 的理解
来源:互联网 发布:浪漫主义文学 知乎 编辑:程序博客网 时间:2024/06/06 20:04
看Android源码时发现有很多地方都用这种方式
private static final int STATIC_CHANGE_1 = 1 << 0 ;
private static final int STATIC_CHANGE_2 = 1 << 1 ;
private static final int STATIC_CHANGE_A = 1 << 2 ;
private static final int STATIC_CHANGE_B = 1 << 3 ;
private static final int STATIC_CHANGE_C = 1 << 4 ;
private static final int STATIC_CHANGE_3 = 1 << 5 ;
private static final int STATIC_CHANGE_4 = 1 << 6 ;
private int mDirty = 0;
如果STATIC_CHANGE_1 代表的变化发生了,就用 mDirty |= STATIC_CHANGE_1 ;
如果要判断STATIC_CHANGE_1 是否发生了,就判断 mDirty & STATIC_CHANGE_1 != 0,为true则发生了。
想想其实这和View测量的数值有点类似,把两个数合成在一起,低两位代表一个值,高位代表另外一个值。
这里的mDirty的二进制每一位相当一个boolean,因为每个static都是*2的,所以不会互相干扰。
比如mDirty = 0 ,先是 |= STATIC_CHANGE_1 就是 0 |= 1 -----》 1
再 |= STATIC_CHANGE_A (4) --》 1 |= 100 --》 101
这样在判断STATIC_CHANGE_1 和STATIC_CHANGE_A 的时候,都能判断出是否改变过,化成二进制的时候明显可以看到,
对应位置上1就是true,0就是false。
为什么?
先来看看传统做法:
private boolean change1 = false;
private boolean change2 = false;
....................
可以看到声明了很多的私有变量,而且不优雅。
什么情况可以用?
1.状态可以叠加,就是change1并不会覆盖change2
2.没想到,下次补充
- 关于Android源码中|= (m & STATIC_VALUE) !=0 的理解
- 关于计数 dp 中 n 的 m 划分的理解
- 关于Android源码的理解以及如何阅读源码
- android 中关于 activity 的一些理解
- 关于android中JNI层的理解
- 自己关于Android中Matrix的理解
- 关于Android中windowleaked异常的理解
- 关于android中BaseAdapter的理解
- Android中关于主线程的理解
- Android开发中关于Layout_weight的理解
- 关于android中BaseAdapter的理解
- 关于android中Context参数的理解
- Android中关于SimpleAdapter的简单理解
- 关于Android中Service的理解
- android中关于IOC的理解
- android中关于padding,margin的理解
- Android中关于自定义属性的理解
- 《STL源码剖析》中关于set_new_handler的理解
- mysql查询Lost connection to MySQL server during query
- ActiveMQ安装启动
- Zxing实现二维码生成和解析,可带logo
- Java内部类
- Self Dividing Numbers
- 关于Android源码中|= (m & STATIC_VALUE) !=0 的理解
- windows nginx 静态文件缓存配置
- 53. Maximum Subarray
- 如果有人问你爬虫抓取技术的门道,请叫他来看这篇文章
- Gradle初次使用
- jvm内存分配技术
- C语言经典项目之二——扫雷
- 1自己常用Linux常用命令
- S5PV210的启动过程详解(一)