我们看到这个setTag()方法在源码中有一个限制
1.方法建议使用资源id作为key
2.如果key的取值高位字节是0或1时,会抛出非法参数异常
资源id的含义:
这里的int中4个字节代表了几个含义:
1.第一个字节代表package级别的标记
2.第二个字节代表资源类型type
3.低位的两个字节代表了具体id在模块下的出现顺序
个人总结如下:
1.限制使用资源id作为key的目的是:利用id的唯一性来规范该方法的使用。
2.高位字节是1时,代表了资源id是系统内部的。为了避免系统将来的改动对应用的影响,因此做了限制。
3.高位字节是0时,表示未定义的package,也做了限制。
4.当协作者都一资源id进行数据存储的时候,就避免了协同开发时的冲突(比如都以0为key)覆盖了其他人所存储的数据。例如集成第三方SDK、使用公共模块的View控件等情况。这样这个方法在提供数据存储功能的同时,也在一定程度上保证了数据的安全性。