Ich habe mir die neuen APIs angesehen, die in Android 4.2 eingeführt wurden . Beim Betrachten der UserManager
Klasse bin ich auf folgende Methode gestoßen:
public boolean isUserAGoat()
Wird verwendet, um zu bestimmen, ob der Benutzer, der diesen Anruf tätigt, Teleportationen ausgesetzt ist.
Gibt zurück, ob der Benutzer, der diesen Anruf tätigt, eine Ziege ist.
Wie und wann soll dies angewendet werden?
java
android
usermanager
Ovidiu Latcu
quelle
quelle
Antworten:
Aus ihrer Quelle die Methode, die verwendet wurde, um zurückzukehren,
false
bis sie in API 21 geändert wurde.Es sieht so aus, als hätte die Methode für uns als Entwickler keinen wirklichen Nutzen. Jemand hat zuvor gesagt, dass es ein Osterei sein könnte .
In API 21 wurde die Implementierung geändert, um zu überprüfen, ob eine installierte App mit dem Paket vorhanden ist
com.coffeestainstudios.goatsimulator
Hier ist die Quelle und die Änderung .
quelle
false
immer zurückkehrt.Ich weiß nicht, ob dies "der" offizielle Anwendungsfall war, aber das Folgende erzeugt eine Warnung in Java (die beim Mischen mit
return
Anweisungen weitere Kompilierungsfehler verursachen kann , was zu nicht erreichbarem Code führt):Dies ist jedoch legal:
Daher schreibe ich oft eine alberne Dienstprogrammmethode, um einen Codeblock am schnellsten auszublenden. Wenn Sie dann das Debuggen abgeschlossen haben, finden Sie alle Aufrufe, sofern sich die Implementierung nicht ändert. Dies kann dafür verwendet werden.
JLS weist darauf hin,
if (false)
dass "nicht erreichbarer Code" nicht ausgelöst wird, weil dies die Unterstützung für Debug-Flags unterbrechen würde, dh im Grunde genommen für diesen Anwendungsfall (h / t @auselen). (static final boolean DEBUG = false;
zum Beispiel).Ich ersetzte
while
fürif
und produzierte einen dunkeleren Anwendungsfall. Ich glaube, Sie können Ihre IDE wie Eclipse mit diesem Verhalten auslösen, aber diese Bearbeitung liegt noch 4 Jahre in der Zukunft, und ich habe keine Eclipse-Umgebung zum Spielen.quelle
else
Block usw.isUserAGoat()
true zurückgegeben, wenn auf einem Benutzer eine bestimmte App installiert ist. Viel Glück bei der Diagnose, wenn sich Ihr Code auf "zufälligen" Geräten plötzlich merkwürdig verhält!Dies scheint ein Insider-Witz bei Google zu sein. Es ist auch im Google Chrome-Task-Manager enthalten. Es hat keinen Zweck, außer dass einige Ingenieure es amüsant finden. Welches ist ein Zweck für sich, wenn Sie so wollen.
Goats Teleported
Spalte hinzuzufügen .Es gibt sogar einen riesigen Chromium-Fehlerbericht über zu viele teleportierte Ziegen .
Das folgende Chromium- Quellcode-Snippet wird aus den HN- Kommentaren gestohlen .
quelle
Dieser Funktionsaufruf ergänzt die @ djechlin- Antwort ( übrigens eine gute Antwort!) Und kann auch als Dummy-Code verwendet werden, um einen Haltepunkt in einer IDE zu halten, wenn Sie in einer bestimmten Iteration oder einem bestimmten rekursiven Aufruf anhalten möchten, zum Beispiel:
isUserAGoat()
könnte anstelle einer Dummy-Variablendeklaration verwendet werden, die in der IDE als Warnung angezeigt wird und im speziellen Fall von Eclipse die Haltepunktmarkierung verstopft, was das Aktivieren / Deaktivieren erschwert. Wenn die Methode als Konvention verwendet wird, können alle Aufrufe später durch ein Skript gefiltert werden (möglicherweise während der Festschreibungsphase?).Google-Leute sind starke Eclipse-Nutzer (sie stellen einige ihrer Projekte als Eclipse-Plugins zur Verfügung: Android SDK, GAE usw.), daher sind die @ djechlin-Antwort und diese ergänzende Antwort (zumindest für mich) sehr sinnvoll.
quelle
;
? Ich meine, Ziegen sind eindeutig besser, aber es gibt bereits einen einfachen Weg, dies zuIn jeder Android-Version gibt es eine lustige benannte Methode / Konstante / was auch immer.
Die einzige praktische Anwendung, die ich jemals gesehen habe, war der letzte Aufruf für den Google I / O- Wettbewerb, bei dem gefragt wurde, was es für eine bestimmte Version ist, um festzustellen, ob die Teilnehmer den API-Diff-Bericht für jede Version gelesen haben. Der Wettbewerb hatte auch Programmierprobleme, aber im Allgemeinen einige Trivia, die zuerst automatisch bewertet werden konnten, um die Anzahl der Einsendungen auf angemessene Beträge zu reduzieren, die leichter zu überprüfen wären.
quelle
In der Disziplin der Spracherkennung werden die Benutzer in geteilte Ziegen und Schafe .
Zum Beispiel hier auf Seite 89 :
Möglicherweise ist geplant, Android-Benutzer in Zukunft als Ziegen zu markieren, um die Spracherkennungs-Engine für die Bedürfnisse von Ziegen konfigurieren zu können. ;-);
quelle
Google hat eine ernsthafte Vorliebe für Ziegen und Ostereier auf Ziegenbasis . Es gab sogar frühere Stack Overflow-Posts darüber .
Wie bereits in früheren Beiträgen erwähnt, ist es auch im Chrome-Task-Manager vorhanden ( es wurde erstmals 2009 in freier Wildbahn veröffentlicht ):
Und dann in Windows-, Linux- und Mac-Versionen von Chrome (Anfang 2010 ). Die Anzahl der "teleportierten Ziegen" ist tatsächlich zufällig :
Andere Google-Verweise auf Ziegen umfassen:
Die früheste Korrelation zwischen Ziegen und Google gehört, soweit ich das beurteilen kann, in den ursprünglichen Blog-Beitrag "Mähen mit Ziegen".
Wir können davon ausgehen, dass es sich lediglich um ein Osterei handelt und nur für die Rückkehr verwendet werden kann
false
.quelle
Ab API 21 (dem ersten Android 5.0 / Lollipop SDK) wird dadurch erkannt, ob die Goat Simulator- App installiert ist:
Dies sollte deutlich machen, dass Djechlins Vorschlag , es als warnfrei zu verwenden,
if (false)
eine potenziell katastrophale Strategie ist. Was vorher zurückfalse
für jedes Gerät gibt nun einen scheinbar zufälligen Wert: wenn diese tief genug in Ihrem Code vergraben war es eine nehmen konnte lange Zeit , um herauszufinden , wo Ihre neuen Fehler herkommen.Fazit: Wenn Sie die Implementierung einer Methode nicht kontrollieren und sie für andere als die in der API-Dokumentation angegebenen Zwecke verwenden, treten Probleme auf.
quelle
if(false)
Produktion aufnehmen? Komm her. Wenn Ihr Code so aussieht, ist diese Änderung der Implementierung das geringste Ihrer Probleme.Es gibt einen ähnlichen Aufruf, der
isUserAMonkey()
true zurückgibt, wenn das MonkeyRunner-Tool verwendet wird. Die SDK-Erklärung ist genauso merkwürdig wie diese.Hier ist die Quelle.
Ich gehe davon aus, dass dies in Erwartung eines neuen SDK- Tools mit dem Namen "Ziege" hinzugefügt wurde und tatsächlich funktionsfähig sein wird, um das Vorhandensein dieses Tools zu testen.
Siehe auch eine ähnliche Frage, Seltsame Funktion in ActivityManager: isUserAMonkey. Was bedeutet das, wozu dient es? .
quelle
ActivityManager
zu melden, ob es vommonkey
UI-Stresstest-Tool aufgerufen wurde , aber ich habe dies nie bestätigt.Lustiges Osterei.
In der Ubuntu-Version von Chrome können Sie im Task-Manager ( shift+ esc) mit der rechten Maustaste eine Science-Fiction-Spalte hinzufügen, die in der italienischen Version "Capre Teletrasportate" (Teleported Goats) lautet.
Eine lustige Theorie darüber ist hier .
quelle
Es ist kein Insider-Witz
Anscheinend ist es nur ein Anwendungsprüfer für Goat Simulator - von Coffee Stain Studios
Wenn Sie Goat Simulator installiert haben, sind Sie eine Ziege. Wenn Sie es nicht installiert haben, sind Sie keine Ziege.
Ich stelle mir vor, es war eher ein persönliches Experiment eines der Entwickler, bei dem höchstwahrscheinlich Leute mit einem gemeinsamen Interesse gefunden wurden.
quelle