Eu estava olhando as novas APIs introduzidas no Android 4.2 . Enquanto olhava para a UserManager
classe, me deparei com o seguinte método:
public boolean isUserAGoat()
Usado para determinar se o usuário que está fazendo esta chamada está sujeito a teleporte.
Retorna se o usuário que está fazendo essa ligação é uma cabra.
Como e quando isso deve ser usado?
java
android
usermanager
Ovidiu Latcu
fonte
fonte
Respostas:
Na origem , o método usado para retornar
false
até ser alterado na API 21.Parece que o método não tem nenhum uso real para nós, como desenvolvedores. Alguém já declarou anteriormente que pode ser um ovo de Páscoa .
Na API 21, a implementação foi alterada para verificar se há um aplicativo instalado com o pacote
com.coffeestainstudios.goatsimulator
Aqui está a fonte e a mudança .
fonte
false
para sempre.Não sei se esse foi "o" caso de uso oficial, mas o seguinte produz um aviso em Java (que pode produzir ainda mais erros de compilação se misturado com
return
instruções, levando a código inacessível):No entanto, isso é legal:
Por isso, muitas vezes me pego escrevendo um método de utilitário bobo para a maneira mais rápida de desvendar um bloco de código e, ao concluir a depuração, localizo todas as chamadas para ele, desde que a implementação não mude, isso pode ser usado para isso.
O JLS aponta
if (false)
que não dispara "código inacessível" pelo motivo específico de que isso interromperia o suporte a sinalizadores de depuração, ou seja, basicamente esse caso de uso (h / t @auselen). (static final boolean DEBUG = false;
por exemplo).Substituí
while
porif
, produzindo um caso de uso mais obscuro. Eu acredito que você pode tropeçar seu IDE, como Eclipse, com este comportamento, mas esta edição é de 4 anos no futuro, e eu não tenho um ambiente Eclipse para brincar.fonte
else
bloco, etc.isUserAGoat()
retorna true se um usuário tiver um aplicativo específico instalado. Boa sorte ao diagnosticar que, quando seu código repentinamente começa a se comportar de maneira estranha em dispositivos "aleatórios"!Parece ser uma piada interna no Google. Também é destaque no gerenciador de tarefas do Google Chrome. Não tem outro objetivo, além de alguns engenheiros acharem divertido. Que é um propósito por si só, se você quiser.
Goats Teleported
coluna.Existe até um enorme relatório de bug do Chromium sobre muitas cabras teletransportadas .
O seguinte snippet de código-fonte do Chromium é roubado dos comentários do HN .
fonte
Complementando a resposta @djechlin (boa resposta, a propósito!), Essa chamada de função também pode ser usada como código fictício para manter um ponto de interrupção em um IDE quando você deseja parar em alguma iteração específica ou em uma chamada recursiva específica, por exemplo:
isUserAGoat()
poderia ser usado em vez de uma declaração de variável fictícia que será mostrada no IDE como um aviso e, no caso particular do Eclipse, obstruirá a marca do ponto de interrupção, dificultando a ativação / desativação. Se o método for usado como convenção, todas as invocações poderão ser posteriormente filtradas por algum script (durante a fase de confirmação, talvez?).Os caras do Google são usuários pesados do Eclipse (eles fornecem vários de seus projetos como plug-ins do Eclipse: Android SDK, GAE etc.), então a resposta @djechlin e essa resposta complementar fazem muito sentido (pelo menos para mim).
fonte
;
? Quero dizer, as cabras são claramente melhor, mas há uma maneira fácil de contornar isso jáExiste um método nomeado engraçado / constante / qualquer coisa em cada versão do Android.
O único uso prático que eu já vi foi no concurso Última chamada para o Google I / O , onde eles perguntaram o que era uma versão específica, para ver se os concorrentes liam o relatório de diferenças de API para cada versão. O concurso também apresentava problemas de programação, mas geralmente algumas trivialidades que poderiam ser classificadas automaticamente primeiro para reduzir o número de envios a quantias razoáveis que seriam mais fáceis de verificar.
fonte
Na disciplina de reconhecimento de fala, os usuários são divididos em cabras e ovelhas .
Por exemplo, aqui na página 89 :
Talvez esteja planejado marcar usuários do Android como cabras no futuro, para poder configurar o mecanismo de reconhecimento de fala para as necessidades das cabras. ;-)
fonte
O Google gosta muito de cabras e ovos de Páscoa baseados em cabras . Houve até postagens anteriores do Stack Overflow sobre isso .
Como foi mencionado nas postagens anteriores, ele também existe no gerenciador de tarefas do Chrome ( que apareceu pela primeira vez em 2009 ):
E depois nas versões Windows, Linux e Mac do Chrome, no início de 2010 ). O número de "cabras teletransportadas" é de fato aleatório :
Outras referências do Google a cabras incluem:
A correlação mais antiga de cabras e do Google pertence à postagem original do blog "Roçada com cabras", até onde eu sei.
Podemos assumir com segurança que é apenas um ovo de Páscoa e não tem uso no mundo real, exceto pelo retorno
false
.fonte
A partir da API 21 (o primeiro Android 5.0 / Lollipop SDK) , isso detecta se o aplicativo Goat Simulator está instalado:
Isso deve deixar claro que a sugestão de djechlin de usá-lo como um aviso
if (false)
é uma estratégia potencialmente desastrosa. O que retornou anteriormentefalse
para todos os dispositivos agora retorna um valor aparentemente aleatório: se isso tiver sido aprofundado o suficiente no seu código, poderá demorar muito tempo para descobrir de onde vêm os novos erros.Conclusão: se você não controla a implementação de um método e decide usá-lo para outros fins que não os mencionados na documentação da API, está enfrentando problemas.
fonte
if(false)
produção? Venha aqui. Se esse é o aspecto do seu código, essa alteração na implementação é o menor dos seus problemas.Existe uma chamada semelhante
isUserAMonkey()
, que retorna true se a ferramenta MonkeyRunner estiver sendo usada. A explicação do SDK é tão curiosa quanto esta.Aqui está a fonte.
Espero que isso tenha sido adicionado em antecipação a uma nova ferramenta SDK denominada algo com uma cabra e será realmente funcional para testar a presença dessa ferramenta.
Consulte também uma pergunta semelhante, Função estranha no ActivityManager: isUserAMonkey. O que isso significa, para que serve? .
fonte
ActivityManager
reportar se foi invocado pelamonkey
ferramenta de teste de estresse da interface do usuário, mas eu nunca confirmei isso.Ovo de Páscoa engraçado.
Na versão Ubuntu do Chrome, no Gerenciador de Tarefas ( shift+ esc), com o botão direito, você pode adicionar uma coluna de ficção científica que na versão italiana é "Capre Teletrasportate" (Cabras Teletransportadas).
Uma teoria engraçada sobre isso está aqui .
fonte
Não é uma piada interna
Aparentemente, é apenas um verificador de aplicativos do Goat Simulator - da Coffee Stain Studios
Se você possui o Goat Simulator instalado, você é uma cabra. Se você não o tem instalado, você não é uma cabra.
Eu imagino que foi mais um experimento pessoal de um dos desenvolvedores, com maior probabilidade de encontrar pessoas com um interesse comum.
fonte