Estaba mirando las nuevas API introducidas en Android 4.2 . Mientras miraba la UserManager
clase me encontré con el siguiente método:
public boolean isUserAGoat()
Se utiliza para determinar si el usuario que realiza esta llamada está sujeto a teletransportaciones.
Devuelve si el usuario que realiza esta llamada es una cabra.
¿Cómo y cuándo se debe usar esto?
java
android
usermanager
Ovidiu Latcu
fuente
fuente
Respuestas:
Desde su origen , el método solía regresar
false
hasta que se modificó en API 21.Parece que el método no tiene un uso real para nosotros como desarrolladores. Alguien ha declarado anteriormente que podría ser un huevo de Pascua .
En API 21, la implementación se cambió para verificar si hay una aplicación instalada con el paquete
com.coffeestainstudios.goatsimulator
Aquí está la fuente y el cambio .
fuente
false
para siempre.No sé si este fue "el" caso de uso oficial, pero lo siguiente produce una advertencia en Java (que puede producir más errores de compilación si se combina con
return
declaraciones, lo que lleva a un código inalcanzable):Sin embargo, esto es legal:
Por lo tanto, a menudo me encuentro escribiendo un método de utilidad tonto para la forma más rápida de simular un bloque de código, luego, al completar la depuración, encuentro todas las llamadas, por lo que siempre que la implementación no cambie, esto se puede usar para eso.
JLS señala
if (false)
que no activa el "código inalcanzable" por la razón específica de que esto rompería el soporte para los indicadores de depuración, es decir, básicamente este caso de uso (h / t @auselen). (static final boolean DEBUG = false;
por ejemplo)He sustituido
while
porif
, produciendo un caso de uso más oscura. Yo creo que puede tropezar a su IDE, como Eclipse, con este comportamiento, pero esta edición es de 4 años en el futuro, y no tienen un entorno Eclipse para jugar.fuente
else
bloque, etc.isUserAGoat()
devuelve verdadero si un usuario tiene instalada una aplicación específica. ¡Buena suerte al diagnosticar eso cuando su código de repente comienza a comportarse de manera extraña en dispositivos "aleatorios"!Esto parece ser una broma interna en Google. También aparece en el administrador de tareas de Google Chrome. No tiene ningún propósito, aparte de que algunos ingenieros lo encuentran divertido. Lo cual es un propósito en sí mismo, por así decirlo.
Goats Teleported
columna.Incluso hay un gran informe de errores de Chromium sobre demasiadas cabras teletransportadas .
El siguiente fragmento de código fuente de Chromium es robado de los comentarios de HN .
fuente
Complementando la respuesta @djechlin (¡buena respuesta por cierto!), Esta llamada de función también podría usarse como código ficticio para mantener un punto de interrupción en un IDE cuando desee detenerse en una iteración específica o una llamada recursiva particular, por ejemplo:
isUserAGoat()
podría usarse en lugar de una declaración de variable ficticia que se mostrará en el IDE como una advertencia y, en el caso particular de Eclipse, obstruirá la marca del punto de interrupción, lo que dificulta su activación / desactivación. Si el método se usa como una convención, todas las invocaciones podrían ser filtradas posteriormente por algún script (¿durante la fase de confirmación, tal vez?).Los usuarios de Google son grandes usuarios de Eclipse (proporcionan varios de sus proyectos como complementos de Eclipse: Android SDK, GAE, etc.), por lo que la respuesta @djechlin y esta respuesta complementaria tienen mucho sentido (al menos para mí).
fuente
;
? Quiero decir, las cabras son claramente mejores, pero ya hay una manera fácil deHay un método con nombre divertido / constante / lo que sea en cada versión de Android.
El único uso práctico que vi fue en la Última convocatoria para el concurso de E / S de Google , donde preguntaron qué era para una versión en particular, para ver si los concursantes leían el informe de diferencias API para cada lanzamiento. El concurso también tuvo problemas de programación, pero en general algunas curiosidades que podrían clasificarse automáticamente primero para reducir el número de envíos a cantidades razonables que serían más fáciles de verificar.
fuente
En la disciplina del reconocimiento de voz, los usuarios se dividen en cabras y ovejas .
Por ejemplo, aquí en la página 89 :
Tal vez, se planea marcar a los usuarios de Android como cabras en el futuro para poder configurar el motor de reconocimiento de voz para las necesidades de las cabras. ;-)
fuente
Google tiene un gran gusto por las cabras y los huevos de Pascua a base de cabra . Incluso ha habido publicaciones anteriores de Stack Overflow al respecto .
Como se mencionó en publicaciones anteriores, también existe dentro del administrador de tareas de Chrome ( apareció por primera vez en la naturaleza en 2009 ):
Y luego en las versiones de Windows, Linux y Mac de Chrome a principios de 2010 ). El número de "cabras teletransportadas" es de hecho aleatorio :
Otras referencias de Google a las cabras incluyen:
La primera correlación de cabras y Google pertenece a la publicación original del blog "Cortar con cabras", por lo que puedo decir.
Podemos suponer con seguridad que es simplemente un huevo de Pascua y que no tiene uso en el mundo real, excepto por el regreso
false
.fuente
A partir de API 21 (el primer SDK de Android 5.0 / Lollipop) , esto detecta si la aplicación Goat Simulator está instalada:
Esto debería dejar en claro que la sugerencia de djechlin de usarlo sin advertencia
if (false)
es una estrategia potencialmente desastrosa. Lo que anteriormente devolvíafalse
para cada dispositivo ahora devuelve un valor aparentemente aleatorio: si esto se enterró lo suficientemente profundo en su código, podría llevar mucho tiempo descubrir de dónde provienen sus nuevos errores.En pocas palabras: si no controla la implementación de un método y decide usarlo para fines distintos a los indicados en la documentación de la API, se enfrentará a problemas.
fuente
if(false)
producción? Ven aquí. Si así es como se ve su código, entonces este cambio de implementación es el menor de sus problemas.Hay una llamada similar
isUserAMonkey()
, que devuelve verdadero si se está utilizando la herramienta MonkeyRunner . La explicación del SDK es tan curiosa como esta.Aquí está la fuente.
Espero que esto se haya agregado en anticipación de una nueva herramienta SDK llamada algo con una cabra y que en realidad sea funcional para probar la presencia de esa herramienta.
También vea una pregunta similar, Función extraña en ActivityManager: isUserAMonkey. ¿Qué significa esto, para qué sirve? .
fuente
ActivityManager
informar si ha sido invocado por lamonkey
herramienta de prueba de estrés ui, pero nunca lo he confirmado.Gracioso huevo de pascua.
En la versión Ubuntu de Chrome, en el Administrador de tareas ( shift+ esc), con un clic derecho puede agregar una columna de ciencia ficción que en la versión italiana es "Capre Teletrasportate" (cabras teletransportadas).
Una teoría divertida al respecto está aquí .
fuente
No es una broma interna
Aparentemente es solo un verificador de aplicaciones para Goat Simulator - por Coffee Stain Studios
Si tienes instalado Goat Simulator, eres una cabra. Si no lo tienes instalado, no eres una cabra.
Me imagino que fue más un experimento personal de uno de los desarrolladores, más probable que encuentre personas con un interés común.
fuente