每次打开 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。同样,这种策略也不能保证唯一性,但在我看来它已经非常接近了。