UUID.randomUUID 在 Android 发生碰撞

UUID.randomUUID collision in Android

我知道 UUID.randomUUID 大部分是好的:how good is java's UUID.randomUUID?

有没有人在 Android 和 UUID.randomUUID 上遇到过问题。由于 Android 使用 Dalvik VM。

我无法重现碰撞。但是,以下代码是可疑的(基于我的生产报告)并且可能会导致在两个不同的进程上 运行 发生冲突(两个应用程序具有相同的代码和不同的包,例如免费应用程序与专业应用程序) ?

private static final String PREFIX = Long.toString(UUID.randomUUID().getLeastSignificantBits());

任何 thoughts/experience 都会有所帮助!

正如我所见,http://docs.oracle.com/javase/7/docs/api/java/util/UUID.html 最低有效数字包含三个字段:

 0xC000000000000000 variant
 0x3FFF000000000000 clock_seq
 0x0000FFFFFFFFFFFF node

如果不使用所有 UUID,就会增加发生冲突的机会。把所有的都拿来怎么样:private static final String PREFIX = UUID.randomUUID().toString();

通过这种方式,您将减少碰撞的机会。