每次打开Android应用程序时分配唯一的ID

时间:2015-06-18 17:34:01

标签: android amazon-dynamodb multiple-users

我正在创建一个应用,其主要目的是收集实验数据,并在每次实验结束时将其上传到数据库。我希望每次运行实验时分配一个唯一的标识符(打开应用程序或重新启动实验)。

我不能使用仅对设备唯一的标识符,因为每个设备都会执行多个实验。

我不能使用基于实验时间的标识符(或其他形式的顺序分配),因为多个设备可以同时提交数据。

目前,我的解决方案是每次运行实验时分配一个随机数,对数据库进行检查并重新计算(如果存在)。这并不完美,因为有可能,但很少见,两个实验将同时运行并分配(偶然)相同的标识符。

每次运行实验时,如何指定唯一标识符?

3 个答案:

答案 0 :(得分:0)

您可以使用UUID。 来自doc:

UUID is an immutable representation of a 128-bit universally unique identifier

答案 1 :(得分:0)

两个实验几乎没有机会在同一时间内发生,直到几毫秒,更不用说从系统中获得的纳秒数。所以你可以轻松地依靠它们的独特性。如果这让您感到不舒服,请将设备ID连接到实验的纳秒时间,这样可以减少碰撞的可能性。 如果你想要绝对疯狂。构建一个服务器,该服务器将具有已生成的所有数字的哈希映射,并将为每个实验应用程序实例重新生成一个新的服务器。如果你愿意的话,我会给你一个算法来提高效率。

您还可以使用GUID https://www.guidgenerator.com/,它基本上相当于随机选择0到2 ^ 128-1之间的数字,这是很多。

答案 2 :(得分:0)

您正在做的事情已经correct

话虽这么说,如果你真的不想在每次插入时检查数据库,你总是可以将设备的唯一MAC wifi地址连接到一个唯一的时间戳。不要使用IMEI号码(例如,仅限wifi的平板电脑没有IMEI号码,技术上IMEI号码也可能因为疏忽制造商而发生冲突)。

MAC wifi地址是唯一的吗?那也是not guaranteed,但如果你将它连接到时间戳,它将提高没有碰撞的机会。

如果你想进一步提高你的机会,你可以随时连接wifi MAC地址,以及时间戳和UUID。同样,这种策略也不能保证唯一性,但在我看来它非常接近。