适用于Android UserManager.isUserAGoat()的正确用例?

我正在研究Android 4.2中引入的新API。 在查看UserManager类时,我遇到了以下方法:

 public boolean isUserAGoat()

用于确定发起此呼叫的用户是否需要远程传送。

返回进行此调用的用户是否是山羊。

如何和何时应该使用?


从它们的源代码中 ,用于返回false的方法直到它在API 21中被更改。

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

看起来这个方法对我们来说并不是真正的开发者。 之前有人表示可能是复活节彩蛋

在API 21中,实施已更改,以检查是否有包com.coffeestainstudios.goatsimulator的已安装应用程序

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

这是来源链接


我不知道这是否是“正式用例”,但是下面的代码会在Java中产生警告(如果与return语句混合在一起会导致编译错误,从而导致无法访问的代码):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

然而这是合法的:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

所以我经常发现自己编写了一个愚蠢的实用方法,以最快的方式去伪造一个代码块,然后在完成调试时找到对它的所有调用,所以假如实现没有改变,那么可以使用它。

JLS指出, if (false)不会触发“无法访问的代码”,原因是这会打破对调试标志的支持,即基本上是这种用例(h / t @auselen)。 (例如, static final boolean DEBUG = false; )。

我更换whileif ,产生更模糊的使用情况。 我相信你可以通过这种行为将你的IDE与Eclipse一起绊倒,但是这种编辑是未来4年,并且我没有Eclipse环境可以使用。


这似乎是Google的一个笑话。 它也在Google Chrome任务管理器中显示。 除了一些工程师发现它有趣之外,它没有任何目的。 如果你愿意,这本身就是一个目的。

  • 在Chrome中,使用Shift + Esc打开任务管理器。
  • 右键点击添加Goats Teleported列。
  • 奇迹。
  • 甚至还有一个关于太多传送山羊的巨大铬报告。

    铬

    以下Chromium源代码片段从HN评论中被盗取。

    int TaskManagerModel::GetGoatsTeleported(int index) const {
      int seed = goat_salt_ * (index + 1);
      return (seed >> 16) & 255;
    }
    
    链接地址: http://www.djcxy.com/p/315.html

    上一篇: Proper use cases for Android UserManager.isUserAGoat()?

    下一篇: Why is the Android emulator so slow? How can we speed up the Android emulator?