我正在研究引入的新API Android 4.2。
一边看着 UserManager
我遇到过以下方法:
public boolean isUserAGoat()
用于确定进行此呼叫的用户是否受传送的影响。
返回进行此调用的用户是否为山羊。
应该如何以及何时使用?
我正在研究引入的新API Android 4.2。
一边看着 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;
例如)。
我换了 while
对于 if
,产生一个更加模糊的用例。一世 相信 你可以通过这种行为来引导你的IDE,比如Eclipse,但这个编辑是未来4年,我没有Eclipse环境可以使用。
这似乎是谷歌内心的笑话。它也是谷歌Chrome任务管理器中的特色。除了一些工程师认为有趣之外,它没有任何意义。如果你愿意的话,这本身就是一个目的。
Goats Teleported
柱。甚至有一个巨大的Chromium bug报告 太多传送的山羊。
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
补充@djechlin 回答 (顺便说一下好的答案!),这个函数调用可以 也 当您想要在某个特定的迭代或特定的递归调用中停止时,用作伪代码来在IDE中保存断点,例如:
isUserAGoat()
可以使用,而不是将在IDE中显示为警告的虚拟变量声明,并且在Eclipse特定情况下,将阻塞断点标记,从而难以启用/禁用它。如果该方法用作约定,则稍后可以通过某些脚本过滤所有调用(在提交阶段可能?)。
谷歌人是沉重的Eclipse用户(他们提供了几个项目作为Eclipse插件:Android SDK,GAE等),所以@djechlin答案和这个补充答案很有意义(至少对我而言)。
在每个版本的Android中都有一个有趣的命名方法/常量/任何东西。
我见过的唯一实际用途是在Last Call for Google I / O. 比赛他们询问特定版本的内容,看看参赛者是否阅读了每个版本的API差异报告。比赛也存在编程问题,但通常会有一些可以自动评分的琐事,以便将提交的数量降低到合理的数量,这样更容易检查。
在语音识别学科中,用户分为 山羊 和 羊。
例如,这里 在第89页:
绵羊是语音识别非常好的人,山羊是非常糟糕的人。只有语音识别器知道它们之间的区别。人们无法预测谁的声音将被轻易识别,谁的声音不会被识别。最好的策略是设计界面,以便它可以处理各种环境中的各种声音
也许,计划在未来将Android用户标记为山羊,以便能够配置语音识别引擎以满足山羊的需求。 ;-)
谷歌非常喜欢山羊和山羊 复活节彩蛋。甚至有过 之前的Stack Overflow发布了它。
正如之前的帖子中所提到的,它也存在于Chrome任务管理器中(它于2009年首次出现在野外):
<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
Goats Teleported
</message>
然后在2010年初的Windows,Linux和Mac版Chrome中)。事实上,“山羊传送”的数量 随机:
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
其他谷歌参考山羊包括:
据我所知,山羊和谷歌的最早相关性属于最初的“割山羊”博客文章。
我们可以安全地假设它只是一个复活节彩蛋,除了返回之外没有现实世界的使用 false
。
从API 21(第一个Android 5.0 / Lollipop 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
对于每个设备现在返回一个看似随机的值:如果这在你的代码中埋得足够深,它可能需要一个 长 是时候弄清楚你的新虫来自哪里了。
结论:如果您不控制方法的实现并决定将其用于API文档中未说明的目的,那么您将遇到麻烦。
有一个类似的电话, isUserAMonkey()
,如果是,则返回true MonkeyRunner工具 正在使用。 SDK解释和这个一样好奇。
public static boolean isUserAMonkey(){}
返回
true
如果用户界面当前正被猴子搞砸了。
这里是来源。
我希望这是为了期待一个新的增加 SDK 用山羊命名的工具和意志 其实 可用于测试该工具的存在。
另见类似问题, ActivityManager中的奇怪函数:isUserAMonkey。这意味着什么,它的用途是什么?。
在这个星球上最偏远的山脉中,有一种先进的山羊种类,它们似乎能够像我们人类一样使用手机!
泄露的镜头: youtu.be/YJwZMUn7GdQ
谷歌必须已经发现了这一点,并决定为他们提供支持,试图保持技术进步的前沿。
有趣的复活节彩蛋
在Ubuntu版Chrome中,在任务管理器中(转移+退出),右键单击即可添加意大利语版本为“Capre Teletrasportate”(Teleported Goats)的科幻专栏。
一个有趣的理论是 这里。