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

每次打开android应用程序时分配唯一ID,android,amazon-dynamodb,multiple-users,Android,Amazon Dynamodb,Multiple Users,我正在创建一个应用程序,其主要目的是为实验收集数据,并在每个实验结束时上传到数据库。每次运行实验时(打开应用程序或重新启动实验),我都要分配一个唯一标识符 我不能只使用设备唯一的标识符,因为每个设备上都会执行多个实验 我不能使用基于实验时间(或其他形式的顺序分配)的标识符,因为多个设备可以同时提交数据 目前,我的解决方案是在每次运行实验时分配一个随机数,根据数据库进行检查并重新计算(如果存在)。这并不完美,因为两个实验可能同时运行并(偶然地)分配相同的标识符,但这种情况很少见 如何在每次运行实验

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

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

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

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

如何在每次运行实验时分配唯一标识符?

您可以使用。 从文档:

UUID is an immutable representation of a 128-bit universally unique identifier
你可以用一个。 从文档:

UUID is an immutable representation of a 128-bit universally unique identifier
你可以用一个。 从文档:

UUID is an immutable representation of a 128-bit universally unique identifier
你可以用一个。 从文档:

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

实际上,两个实验在同一时间内发生的可能性为零,最长可达毫秒,更不用说从系统中获得的纳秒了。所以你可以很容易地相信他们的独特性。如果这让你感到不舒服,那么将设备id与时间(以纳秒为单位)连接到实验中,这将使它更不可能发生碰撞。 如果你想发疯的话。构建一个服务器,该服务器将拥有一个已生成的所有数字的hashmap,并将为每个实验应用程序实例重新生成一个新的hashmap。如果你想的话,我可以给你一个算法来提高效率


您还可以使用GUID,它基本上相当于随机选取一个介于0到2^128-1之间的数字,这是一个很大的数目

两个实验在同一时间发生的可能性几乎为零,最长可达毫秒,更不用说从系统中获得的纳秒了。所以你可以很容易地相信他们的独特性。如果这让你感到不舒服,那么将设备id与时间(以纳秒为单位)连接到实验中,这将使它更不可能发生碰撞。 如果你想发疯的话。构建一个服务器,该服务器将拥有一个已生成的所有数字的hashmap,并将为每个实验应用程序实例重新生成一个新的hashmap。如果你想的话,我可以给你一个算法来提高效率


您还可以使用GUID,它基本上相当于随机选取一个介于0到2^128-1之间的数字,这是一个很大的数目

两个实验在同一时间发生的可能性几乎为零,最长可达毫秒,更不用说从系统中获得的纳秒了。所以你可以很容易地相信他们的独特性。如果这让你感到不舒服,那么将设备id与时间(以纳秒为单位)连接到实验中,这将使它更不可能发生碰撞。 如果你想发疯的话。构建一个服务器,该服务器将拥有一个已生成的所有数字的hashmap,并将为每个实验应用程序实例重新生成一个新的hashmap。如果你想的话,我可以给你一个算法来提高效率


您还可以使用GUID,它基本上相当于随机选取一个介于0到2^128-1之间的数字,这是一个很大的数目

两个实验在同一时间发生的可能性几乎为零,最长可达毫秒,更不用说从系统中获得的纳秒了。所以你可以很容易地相信他们的独特性。如果这让你感到不舒服,那么将设备id与时间(以纳秒为单位)连接到实验中,这将使它更不可能发生碰撞。 如果你想发疯的话。构建一个服务器,该服务器将拥有一个已生成的所有数字的hashmap,并将为每个实验应用程序实例重新生成一个新的hashmap。如果你想的话,我可以给你一个算法来提高效率


您还可以使用GUID,它基本上相当于随机选取一个介于0到2^128-1之间的数字,这是一个很大的数目

你正在做的事情已经发生了

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

MAC wifi地址是否唯一?也可以,但如果将其连接到时间戳,将提高不发生冲突的可能性


如果你想进一步提高机会,你可以将wifi MAC地址、时间戳和UUID连接起来。同样,这种策略也不能保证独特性,但在我看来,它已经非常接近了

你正在做的事情已经发生了

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

MAC wifi地址是否唯一?也可以,但如果将其连接到时间戳,将提高不发生冲突的可能性


如果你想进一步提高机会,你可以将wifi MAC地址、时间戳和UUID连接起来。同样,这种策略也不能保证独特性,但在我看来,它已经非常接近了

你正在做的事情已经发生了

也就是说,如果你真的不想每次插入时都检查数据库,你可以将设备的唯一MAC wifi地址连接到一个唯一的时间戳。做