Ovi*_*tcu 3506 java android usermanager
我正在研究Android 4.2中引入的新API .在看UserManager
课时,我遇到了以下方法:
Run Code Online (Sandbox Code Playgroud)public boolean isUserAGoat()
用于确定进行此呼叫的用户是否受传送的影响.
返回进行此调用的用户是否为山羊.
应该如何以及何时使用?
meh*_*meh 1725
从他们的来源,用于返回的方法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;
}
Run Code Online (Sandbox Code Playgroud)
看起来这个方法作为开发人员对我们没有实际用处.有人此前曾表示可能是复活节彩蛋.
在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");
}
Run Code Online (Sandbox Code Playgroud)
dje*_*lin 966
我不知道这是否是"官方用例",但是以下内容会在Java中产生警告(如果与return
语句混合会导致编译错误,导致无法访问的代码):
while (1 == 2) { // Note that "if" is treated differently
System.out.println("Unreachable code");
}
Run Code Online (Sandbox Code Playgroud)
但这是合法的:
while (isUserAGoat()) {
System.out.println("Unreachable but determined at runtime, not at compile time");
}
Run Code Online (Sandbox Code Playgroud)
因此,我经常发现自己编写一个愚蠢的实用方法,以最快的方式来编写代码块,然后在完成调试时找到对它的所有调用,因此如果实现没有改变,则可以使用它.
JLS指出if (false)
不会触发"无法访问的代码",因为这会破坏对调试标志的支持,即基本上这个用例(h/t @auselen).(static final boolean DEBUG = false;
例如).
我替换while
了if
,产生了一个更加模糊的用例.我相信你可以通过这种行为来升级你的IDE,比如Eclipse,但是这个编辑是未来4年,我没有Eclipse环境可以使用.
小智 746
这似乎是谷歌内心的笑话.它也是谷歌Chrome任务管理器中的特色.除了一些工程师发现它很有趣之外,它没有任何意义.如果你愿意的话,这本身就是一个目的.
Goats Teleported
列.关于太多传送的山羊,甚至还有一个巨大的Chromium bug报告.
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
Run Code Online (Sandbox Code Playgroud)
hig*_*aro 282
补充@djechlin 答案(!好回答的方式),这个函数调用可以同时用作虚拟代码保持一个断点在IDE中,当你想停止在某些特定的迭代或特定的递归调用,例如:
isUserAGoat()
可以用来代替虚拟变量声明,它将在IDE中显示为警告,并且在Eclipse的特定情况下,将阻塞断点标记,从而难以启用/禁用它.如果该方法用作约定,则稍后可以通过某些脚本过滤所有调用(在提交阶段可能?).
谷歌人是沉重的Eclipse用户(他们提供他们的几个项目作为Eclipse插件:Android SDK,GAE等),所以@djechlin答案和这个补充答案很有意义(至少对我而言).
Lan*_*nek 141
在每个版本的Android中都有一个有趣的命名方法/常量/任何东西.
我见过的唯一实际用途是在Google I/O竞赛的最后一次召集中,他们询问了特定版本的内容,看看参赛者是否阅读了每个版本的API差异报告.比赛也存在编程问题,但通常会有一些可以自动评分的琐事,以便将提交的数量降低到更容易检查的合理数量.
ric*_*uck 123
谷歌非常喜欢山羊和山羊的复活节彩蛋.甚至还有关于它的Stack Overflow帖子.
正如之前的帖子中所提到的,它也存在于Chrome任务管理器中(它在2009年首次出现):
<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
Goats Teleported
</message>
Run Code Online (Sandbox Code Playgroud)
然后在2010年初的Windows,Linux和Mac版Chrome中)."山羊传送"的数量实际上是随机的:
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
Run Code Online (Sandbox Code Playgroud)
其他谷歌参考山羊包括:
据我所知,山羊与谷歌的最早相关性属于最初的"割山羊"博客文章.
我们可以安全地假设它只是一个复活节彩蛋,除了返回之外没有现实世界的使用false
.
Mar*_*ker 119
从API 21(第一个Android 5.0/Lollipop SDK)开始,它会检测是否安装了Goat Simulator应用程序:
/**
* 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");
}
Run Code Online (Sandbox Code Playgroud)
这应该清楚表明,djechlin建议将其用作无警告if (false)
是一种潜在的灾难性策略.之前false
为每个设备返回的内容现在返回一个看似随机的值:如果在您的代码中埋藏得足够深,则可能需要很长时间来确定新错误的来源.
结论:如果您不控制方法的实现并决定将其用于API文档中未说明的目的,那么您将遇到麻烦.
KDE*_*DEx 104
有一个类似的调用,isUserAMonkey()
如果使用MonkeyRunner工具,则返回true .SDK解释和这个一样好奇.
Run Code Online (Sandbox Code Playgroud)public static boolean isUserAMonkey(){}
true
如果用户界面当前正被猴子搞砸,则返回.
这是来源.
我希望这是为了期待一个名为山羊的新SDK工具而添加的,并且实际上可用于测试该工具的存在.
另请参阅类似问题,ActivityManager中的Strange函数:isUserAMonkey.这意味着什么,它的用途是什么?.
小智 13
从可用性和可访问性的角度来看,了解您的用户是否是山羊非常重要。
如果山羊想要真正受益于信息时代提供的所有功能,那么它们实际上对软件有非常不同的需求。
我认为一些善良的开发人员关心我们所有的用户,而不仅仅是时尚的用户,这真是太好了。
小智 9
这不是一个内部玩笑
显然这只是 Goat Simulator 的应用程序检查器 - 由 Coffee Stain Studios 制作
如果您安装了模拟山羊,您就是一只山羊。如果你没有安装它,你就不是山羊。
我想这更多的是一位开发人员的个人实验,最有可能找到有共同兴趣的人。
归档时间: |
|
查看次数: |
303445 次 |
最近记录: |