Я смотрел на новые API, представленные в Android 4.2 . Глядя на UserManager
класс, я наткнулся на следующий метод:
public boolean isUserAGoat()
Используется для определения того, подвергается ли пользователь, совершающий этот вызов, телепортации.
Возвращает, является ли пользователь, делающий этот вызов, козлом.
Как и когда это следует использовать?
java
android
usermanager
Овидиу Латку
источник
источник
Ответы:
Исходя из их источника , этот метод использовался для возврата,
false
пока он не был изменен в API 21.Похоже, что метод не имеет реального применения для нас как разработчиков. Кто-то ранее заявлял, что это может быть пасхальное яйцо .
В API 21 реализация была изменена, чтобы проверить, установлено ли приложение с пакетом
com.coffeestainstudios.goatsimulator
Вот источник и изменения .
источник
false
навсегда.Я не знаю, был ли это «официальный» вариант использования, но следующее выдает предупреждение в Java (которое может привести к ошибкам компиляции, если их смешать с
return
операторами, что приведет к недоступности кода):Однако это законно:
Поэтому я часто пишу глупый служебный метод для быстрого способа вытащить блок кода, а затем при завершении отладки найти все вызовы к нему, так что при условии, что реализация не изменилась, это можно использовать для этого.
JLS указывает,
if (false)
что не вызывает «недоступный код» по той конкретной причине, что это нарушит поддержку флагов отладки, т. Е. В основном это вариант использования (h / t @auselen). (static final boolean DEBUG = false;
например).Я заменил
while
наif
, производя более неясный случай использования. Я полагаю, что вы можете отключить вашу IDE, например, Eclipse, с таким поведением, но это редактирование через 4 года, и у меня нет среды Eclipse для игры.источник
else
isUserAGoat()
возвращает true, если у пользователя установлено конкретное приложение. Удачи в диагностике, когда ваш код вдруг начинает странно себя вести на «случайных» устройствах!Это похоже на внутреннюю шутку в Google. Это также присутствует в диспетчере задач Google Chrome. У него нет цели, кроме некоторых инженеров, которые находят это забавным. Что само по себе является целью, если хотите.
Goats Teleported
столбец.Существует даже огромное сообщение об ошибке Chromium о слишком большом количестве телепортированных коз .
Следующий фрагмент исходного кода Chromium украден из комментариев HN .
источник
В дополнение к ответу @djechlin ( кстати, хороший ответ!) Этот вызов функции может также использоваться как фиктивный код для удержания точки останова в IDE, когда вы хотите остановиться в какой-то конкретной итерации или конкретном рекурсивном вызове, например:
isUserAGoat()
может использоваться вместо фиктивного объявления переменной, которое будет отображаться в IDE в качестве предупреждения и, в частном случае Eclipse, будет забивать метку точки останова, затрудняя ее включение / отключение. Если метод используется в качестве соглашения, все вызовы могут быть позже отфильтрованы каким-либо сценарием (возможно, на этапе фиксации?).Ребята из Google - активные пользователи Eclipse (они предоставляют несколько своих проектов в виде плагинов Eclipse: Android SDK, GAE и т. Д.), Поэтому ответ @djechlin и этот дополнительный ответ имеют большой смысл (по крайней мере, для меня).
источник
;
? Я имею в виду, козы явно лучше, но уже есть простой способ обойти этоВ каждой версии Android есть забавный метод / константа / что угодно.
Единственное практическое применение, которое я когда-либо видел, было в конкурсе ввода-вывода Last Call for Google, где они спрашивали, что это за конкретная версия, чтобы узнать, читают ли участники отчет API diff для каждого выпуска. В конкурсе тоже были проблемы с программированием, но, как правило, некоторые мелочи, которые можно было бы сначала оценить автоматически, чтобы уменьшить количество заявок до разумных сумм, которые было бы легче проверить.
источник
В дисциплине распознавания речи пользователи делятся на коз и овец .
Например, здесь, на странице 89 :
Возможно, в будущем планируется пометить пользователей Android как козлов, чтобы иметь возможность настроить механизм распознавания речи для нужд коз. ;-)
источник
Google очень любит коз и пасхальные яйца на козьей основе . Там даже были предыдущие посты переполнения стека об этом .
Как упоминалось в предыдущих статьях, он также существует в диспетчере задач Chrome ( он впервые появился в дикой природе в 2009 году ):
А затем в версиях Chrome для Windows, Linux и Mac в начале 2010 года ). Количество «Телепортов коз» фактически случайное :
Другие ссылки Google на коз включают в себя:
Насколько я могу судить, самое раннее соотношение коз и Google принадлежит оригинальной записи в блоге "Кошение с козами".
Мы можем с уверенностью предположить, что это просто пасхальное яйцо и не имеет никакого реального применения, кроме как возвращение
false
.источник
Начиная с API 21 (первый Android 5.0 / Lollipop SDK) , он определяет, установлено ли приложение Goat Simulator :
Это должно прояснить, что предложение Джехлина использовать его как предупреждение
if (false)
- потенциально катастрофическая стратегия. То, что ранее возвращалосьfalse
для каждого устройства, теперь возвращает, казалось бы, случайное значение: если это было закопано достаточно глубоко в вашем коде, то может потребоваться много времени, чтобы выяснить, откуда появляются ваши новые ошибки.Итог: если вы не контролируете реализацию метода и решаете использовать его для целей, отличных от указанных в документации API, вы столкнетесь с проблемами.
источник
if(false)
в производство? Идите сюда. Если именно так выглядит ваш код, то изменение этой реализации - наименьшая из ваших проблем.Существует аналогичный вызов,
isUserAMonkey()
который возвращает true, если используется инструмент MonkeyRunner . Объяснение SDK так же любопытно, как и это.Вот источник.
Я ожидаю, что это было добавлено в ожидании нового инструмента SDK , названного что-то с козой, и фактически будет функциональным, чтобы проверить наличие этого инструмента.
Также см. Аналогичный вопрос, Странная функция в ActivityManager: isUserAMonkey. Что это значит, что его использовать? ,
источник
ActivityManager
ему сообщать, был ли он вызванmonkey
инструментом стресс-тестирования пользовательского интерфейса, но я никогда не подтверждал это.Смешное пасхальное яйцо.
В версии Chrome для Ubuntu, в диспетчере задач ( shift+esc ), щелкнув правой кнопкой мыши, вы можете добавить научно-фантастический столбец, который в итальянской версии называется «Capre Teletrasportate» (Teleported Goats).
Забавная теория об этом здесь .
источник
Это не внутренняя шутка
По всей видимости, это всего лишь проверка приложений для Goat Simulator - Coffee Stain Studios
Если у вас установлен Goat Simulator, вы козел. Если он не установлен, вы не козел.
Я предполагаю, что это был скорее личный эксперимент одного из разработчиков, скорее всего, чтобы найти людей с общими интересами.
источник