Правильные варианты использования для Android UserManager.isUserAGoat()?
Я смотрел на новые API, представленные в Android 4.2. Глядя на класс UserManager
я наткнулся на следующий метод:
public boolean isUserAGoat()
Используется для определения того, подвергается ли пользователь, совершающий этот вызов, телепортации.
Возвращает, является ли пользователь, делающий этот вызов, козлом.
Как и когда это следует использовать?
Ответы
Ответ 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;
}
Похоже, что метод не имеет реального применения для нас как разработчиков. Кто-то ранее заявлял, что это может быть пасхальное яйцо.
В 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");
}
Вот источник и изменения.
Ответ 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;
).
Я заменил while
на if
, создав более неясный вариант использования. Я считаю, что вы можете отключить вашу среду IDE, например Eclipse, с этим поведением, но это редактирование составляет 4 года в будущем, и у меня нет среды Eclipse для воспроизведения.
Ответ 3
Это, кажется, внутренняя шутка в Google. Он также отображается в диспетчере задач Google Chrome. У него нет никакой цели, кроме некоторых инженеров, которые считают это забавным. Какая цель сама по себе, если хотите.
- В Chrome откройте диспетчер задач с помощью Shift + Esc.
- Щелкните правой кнопкой мыши, чтобы добавить столбец
Goats Teleported
.
- Wonder.
Существует даже огромный отчет об ошибке Chromium о слишком много телепортированных козлов.
Следующий фрагмент кода Chromium украден из комментариев HN.
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
Ответ 4
В дополнение к ответу @djechlin (хороший ответ, кстати!), этот вызов функции может быть также использован как фиктивный код для хранения точку останова в среде IDE, когда вы хотите остановиться в некоторой конкретной итерации или конкретном рекурсивном вызове, например:
isUserAGoat()
может использоваться вместо объявления фиктивной переменной, которое будет отображаться в среде IDE в качестве предупреждения, а в частном случае Eclipse забивает метку точки останова, что затрудняет ее включение/отключение. Если метод используется как соглашение, все вызовы могут быть позже отфильтрованы некоторым script (во время фазы фиксации, возможно?).
Ребята из Google - это тяжелые пользователи Eclipse (они предоставляют несколько своих проектов как плагины Eclipse: Android SDK, GAE и т.д.), поэтому ответ @djechlin и этот дополнительный ответ имеют большой смысл (по крайней мере для меня).
Ответ 5
В каждой версии Android есть смешной метод /constant/whatever.
Единственное практическое применение, которое я когда-либо видел, было в последнем вызове конкурса Google I/O, на котором они спросили, что именно для конкретной версии, чтобы посмотреть, будут ли конкурсанты прочитайте отчет API diff для каждой версии. В конкурсе также были проблемы с программированием, но в целом некоторые мелочи, которые можно было автоматически классифицировать, чтобы получить количество материалов до разумных количеств, которые было бы легче проверить.
Ответ 6
В дисциплине распознавания речи пользователи делятся на коз и овец.
Например, здесь, на странице 89:
Овцы - это люди, для которых распознавание речи работает исключительно хорошо, а козы - это люди, для которых оно работает исключительно плохо. Только распознаватель голоса знает, что их разделяет. Люди не могут предсказать, чей голос будет легко распознан, а чей нет. Лучшая политика заключается в разработке интерфейса, чтобы он мог обрабатывать всевозможные голоса в любых средах.
Возможно, в будущем планируется пометить пользователей Android как козлов, чтобы иметь возможность настроить механизм распознавания речи для нужд коз. ;-)
Ответ 7
У Google есть серьезная симпатия к козам и козам Пасхальные яйца. Там даже были предыдущие Stack сообщения о переполнении.
Как уже упоминалось в предыдущих сообщениях, он также существует в диспетчере задач Chrome (он впервые появился в дикой природе в 2009 году):
<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
Goats Teleported
</message>
А потом в Windows, Linux и Mac версии Chrome в начале 2010 года). Количество "Козлов телепортировано" на самом деле random:
int TaskManagerModel::GetGoatsTeleported(int index) const {
int seed = goat_salt_ * (index + 1);
return (seed >> 16) & 255;
}
Другие ссылки Google на коз включают:
Самое раннее соотношение коз и Google принадлежит, как я могу судить, в исходном блоге "Кошение с козами".
Мы можем с уверенностью предположить, что это просто пасхальное яйцо и не имеет реального использования, за исключением возврата false
.
Ответ 8
Начиная с 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");
}
Это должно дать понять, что предложение djechlin использовать его в качестве бесплатного if (false)
без предупреждения - потенциально катастрофическая стратегия. То, что ранее возвращало false
для каждого устройства, теперь возвращает кажущееся случайное значение: если это было достаточно глубоко погребено в коде, может потребоваться много времени, чтобы выяснить, откуда происходят ваши новые ошибки.
Нижняя строка: если вы не контролируете реализацию метода и не решили использовать его для целей, отличных от указанных в документации API, вы столкнулись с проблемами.
Ответ 9
Существует аналогичный вызов isUserAMonkey()
, который возвращает true, если используется инструмент MonkeyRunner. Объяснение SDK так же любопытно, как и этот.
public static boolean isUserAMonkey(){}
Возвращает true
, если пользовательский интерфейс в настоящее время запущен обезьяной.
Здесь является источником.
Я ожидаю, что это было добавлено в ожидании нового инструмента Странная функция в ActivityManager: isUserAMonkey. Что это значит, каково его использование?.
Ответ 10
В самых отдаленных горах планеты находится продвинутый вид козы, который, по-видимому, в настоящее время способен использовать телефоны, как и мы, люди!
Утечка: youtu.be/YJwZMUn7GdQ
Google, должно быть, заметил это и решил оказать им поддержку, пытаясь остаться на переднем крае технологического развития.
Ответ 11
Смешное пасхальное яйцо.
В версии Ubuntu Chrome, в диспетчере задач (shift + esc), щелкнув правой кнопкой мыши, вы можете добавить научную колонку, которая в итальянской версии будет "Capre Teletrasportate" (Teleported Goats).
Смешная теория об этом здесь.
Ответ 12
Пожалуйста, смотрите ниже исходный код:
/**
* 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");
}
Ответ 13
Это не внутренняя шутка. По-видимому, это просто проверка приложений для Goat Simulator - Coffee Stain Studios
Если у вас установлен Goat Simulator, ваш козел. Если он не установлен, вы не козел.
Я полагаю, что это был скорее личный эксперимент одного из разработчиков, скорее всего, социальный эксперимент по поиску людей с общими интересами.