我的应用程序将离线数据存储在sqlite中,然后根据用户选择将其同步到在线服务器.我需要sqlite中每行的唯一ID,以便在我同步/更新时,我可以管理每行的状态和其他内容.
使用我的应用,所有设备的唯一ID都应该是唯一的.我试过System.currentTimeMillis()的选项,但它似乎可以跨设备重复.我搜索的其他选项是UUID或合并2个值,如System.currentTimeMillis()和Random.nextLong()来创建唯一值
这样做的最佳和最可靠的方法是什么?
你正确使用你的UUID.UUID意味着Universally Unique IDentifier,它专门为您拥有的分布式计算环境而设计,具有多个设备,可生成唯一记录.因此,它"实际上是独一无二的".这正是它所说的 - 实际上,它在所有设备和时间上都是独一无二的.大多数实现采用某种形式的设备ID(例如实际上唯一的MAC地址),以及时间元素和加密的位置信息(geo-IP或类似的).
在Java/Android中,您可以使用UUID.randomUUID().toString()为SQLite数据库生成唯一的主键.一旦您同步回服务器,这些主键实际上将是唯一的.
我建议不要尝试实现自己的UUID方案(基于AndroidID,MAC地址,IMEI,系统时间等).虽然您可能获得轻微的存储优势,但开发和故障排除(IMHO)的努力是不值得的.
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |