正确使用的情况下为Android UserManager.isUserAGoat()?(Proper

2019-07-03 20:14发布

我一直在寻找在推出新的API 的Android 4.2 。 虽然看UserManager类,我碰到下面的方法:

 public boolean isUserAGoat() 

用于确定使该呼叫的用户是否受到teleportations。

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

应该如何和何时该使用?

Answer 1:

从他们的来源 ,该方法用于返回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;
}

它看起来像方法对我们没有实际使用的开发人员。 有人曾表示,它可能是一个复活节彩蛋

在21 API执行改为检查是否有与包的安装的应用程序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");
}

这里是源和变化 。



Answer 2:

我不知道这是否是“”官用例,但下面产生在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环境中一起玩。



Answer 3:

这似乎是在谷歌内部的笑话。 它也采用了谷歌Chrome的任务管理器。 它没有目的,比一些工程师发现很有趣其他。 这本身就是一个目的,如果你愿意。

  1. 在Chrome中,打开任务管理器Shift + Esc键
  2. 右键单击要添加Goats Teleported列。
  3. 奇迹。

甚至还有约一个巨大的铬bug报告太多被传山羊 。

下面的铬源代码片段从被盗HN意见。

int TaskManagerModel::GetGoatsTeleported(int index) const {
  int seed = goat_salt_ * (index + 1);
  return (seed >> 16) & 255;
}


Answer 4:

补充@djechlin 答案 (!好回答的方式),这个函数调用可以用于作为虚拟代码保持一个断点在IDE中,当你想停止在某些特定的迭代或特定的递归调用,例如:

isUserAGoat()可被用来代替将在IDE所示被作为警告,并且在Eclipse特定情况下的伪变量声明,将堵塞断点标记,使得难以打开/关闭它。 如果该方法作为惯例,所有调用以后可以通过一些脚本过滤(在提交阶段可能?)。

谷歌人是沉重的Eclipse用户(他们提供一些他们的项目作为Eclipse插件:Android SDK中,GAE等),所以@djechlin答案,这个答案补充作出了很大的意义(至少对我来说)。



Answer 5:

有一个有趣的命名的方法/常数/不管在Android中的每个版本。

我见过的唯一的实际用途是最后一次通话的谷歌I / O比赛,他们问这是什么的一个特定版本,看看是否参赛者阅读各版本的API差异报告。 本次大赛已编程的问题太多,但通常一些琐事,可以自动分级先拿到意见书的数量减少到合理的金额,会更容易检查。



Answer 6:

在语音识别的纪律,用户分为山羊绵羊

举例来说,这里89页

羊是人们对他们来说,语音识别的工作非常好,和山羊是人而言,它的工作原理非常糟糕。 只有语音识别知道什么将它们分开。 人们无法预测谁的声音会很容易识别,并且其不会。 最好的策略是设计接口,因此它可以处理各种声音在各种恶劣环境

也许,它计划将标志着Android用户在将来山羊能够配置山羊需求的语音识别引擎。 ;-)



Answer 7:

谷歌有山羊和山羊基于严重的喜好复活节彩蛋 。 目前甚至已经先前关于它的堆栈溢出的职位 。

正如在以前的文章已经提到,它也是Chrome的任务管理器中存在( 它第一次在野外出现在2009年 ):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

然后在Windows和Chrome的Linux和Mac版本2010年初 )。 “被传山羊”的数量实际上是随机的 :

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

以山羊其他谷歌的参考文献包括:

  • 山羊割草
  • 山羊是baaaahk

山羊和谷歌最早的相关性属于在原有的“山羊割草”的博客文章,据我可以告诉。

我们可以有把握地认为它只是一个复活节彩蛋,并没有实际使用,除了返回false



Answer 8:

正如API 21(第1与Android 5.0 /棒棒糖SDK)的 ,此检测是否山羊模拟器被安装的应用:

/**
 * 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");
}

这应该说清楚, djechlin的建议使用它作为一个无警告的if (false)是一个潜在的灾难性的策略。 什么以前返回false每个设备现在返回一个看似随机值:如果这是深埋足够你的代码,它可能需要很长的时间来找出新的bug的来源。

底线:如果你不控制方法的实现,并决定将其用于其他目的,而不是API文档中说明,你就会惹麻烦。



Answer 9:

还有一个类似的呼吁, isUserAMonkey()如果返回true MonkeyRunner工具被使用。 该SDK的解释就是因为这一个好奇。

 public static boolean isUserAMonkey(){} 

返回true如果用户界面正在与猴子混乱。

这里是源。

我希望这是在一个新的预期增加SDK工具名为东西,山羊和实际上是功能性测试该工具的存在。

也看到了类似的问题, 在ActivityManager奇怪的功能:isUserAMonkey。 这是什么意思,有什么用途?



Answer 10:

有趣的复活节彩蛋。
在Ubuntu版Chrome浏览器,在任务管理器(SHIFT + ESC),用鼠标右键单击您可以添加一个科幻列,在意大利语版本是“卡普雷Teletrasportate”(传送人数山羊)。

关于它的一个有趣的理论是在这里 。



Answer 11:

请看下面的代码:

/**
 * 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");
}


Answer 12:

它不是一个内部笑话显然,这只是一个应用程序检查山羊模拟器-由咖啡渍工作室

如果你安装了山羊模拟器,你是一个山羊。 如果你没有安装它,你不是山羊。

我想这更多的是个人的实验通过的开发者之一,最有可能的一个社会实验,以寻找具有共同兴趣的人。



文章来源: Proper use cases for Android UserManager.isUserAGoat()?