每次打开 android 个应用程序时分配一个唯一 ID
Assigning a unique ID every time android app is opened
我正在创建一个应用程序,其主要目的是收集实验数据,并在每次实验结束时将其上传到数据库。我想在每次实验 运行(打开应用程序或重新启动实验)时分配一个唯一标识符。
我不能使用仅对设备唯一的标识符,因为每个设备都会执行多个实验。
我不能使用基于实验时间的标识符(或其他形式的顺序分配),因为多个设备可能同时提交它们的数据。
目前,我的解决方案是在每次实验 运行 时分配一个随机数,并根据数据库进行检查,如果存在则重新计算。这并不完美,因为有可能但很少见,两个实验将同时 运行 并(偶然地)分配相同的标识符。
如何在每次实验 运行 时分配唯一标识符?
您可以使用 UUID。
来自文档:
UUID is an immutable representation of a 128-bit universally unique identifier
在毫秒内同时进行 2 个实验的可能性几乎为零,更不用说您可以从系统中获得的纳秒级了。因此,您可以轻松地依赖它们的独特性。如果这让您感到不舒服,请将设备 ID 与以纳秒为单位的时间连接到实验中,这将使其更不可能发生碰撞。
如果你想发疯。构建一个服务器,该服务器将拥有它已经生成的所有数字的哈希图,并将为每个实验应用程序实例重新生成一个新的哈希图。如果你愿意,我会给你一个算法,让它变得高效。
您还可以使用 GUID https://www.guidgenerator.com/,这基本上等同于在 0 到 2^128-1 之间随机选择一个数字,这是一个 LOT。
您正在做的已经 correct。
也就是说,如果您真的不想每次插入时都检查数据库,您始终可以将设备的唯一 MAC wifi 地址连接到一个唯一的时间戳。不要使用 IMEI 号码(例如,只有 wifi 的平板电脑没有 IMEI 号码,技术上 IMEI 号码也可能因为制造商的疏忽而冲突)。
MAC wifi 地址是否唯一?那也是 not guaranteed,但是如果您将它连接到时间戳,它将提高不发生冲突的机会。
如果您想进一步提高成功率,您可以随时连接 wifi MAC 地址、时间戳和 UUID。同样,这种策略也不能保证唯一性,但在我看来它已经非常接近了。
我正在创建一个应用程序,其主要目的是收集实验数据,并在每次实验结束时将其上传到数据库。我想在每次实验 运行(打开应用程序或重新启动实验)时分配一个唯一标识符。
我不能使用仅对设备唯一的标识符,因为每个设备都会执行多个实验。
我不能使用基于实验时间的标识符(或其他形式的顺序分配),因为多个设备可能同时提交它们的数据。
目前,我的解决方案是在每次实验 运行 时分配一个随机数,并根据数据库进行检查,如果存在则重新计算。这并不完美,因为有可能但很少见,两个实验将同时 运行 并(偶然地)分配相同的标识符。
如何在每次实验 运行 时分配唯一标识符?
您可以使用 UUID。 来自文档:
UUID is an immutable representation of a 128-bit universally unique identifier
在毫秒内同时进行 2 个实验的可能性几乎为零,更不用说您可以从系统中获得的纳秒级了。因此,您可以轻松地依赖它们的独特性。如果这让您感到不舒服,请将设备 ID 与以纳秒为单位的时间连接到实验中,这将使其更不可能发生碰撞。 如果你想发疯。构建一个服务器,该服务器将拥有它已经生成的所有数字的哈希图,并将为每个实验应用程序实例重新生成一个新的哈希图。如果你愿意,我会给你一个算法,让它变得高效。
您还可以使用 GUID https://www.guidgenerator.com/,这基本上等同于在 0 到 2^128-1 之间随机选择一个数字,这是一个 LOT。
您正在做的已经 correct。
也就是说,如果您真的不想每次插入时都检查数据库,您始终可以将设备的唯一 MAC wifi 地址连接到一个唯一的时间戳。不要使用 IMEI 号码(例如,只有 wifi 的平板电脑没有 IMEI 号码,技术上 IMEI 号码也可能因为制造商的疏忽而冲突)。
MAC wifi 地址是否唯一?那也是 not guaranteed,但是如果您将它连接到时间戳,它将提高不发生冲突的机会。
如果您想进一步提高成功率,您可以随时连接 wifi MAC 地址、时间戳和 UUID。同样,这种策略也不能保证唯一性,但在我看来它已经非常接近了。