Android 4.2에 도입된 새로운 API를 살펴보고 있었습니다.UserManager
클래스를 보는 동안 다음 방법을 발견했습니다.
public boolean isUserAGoat()
이 호출을 하는 사용자가 순간이동의 대상인지 여부를 결정하는 데 사용됩니다.
이 호출을 하는 사용자가 염소인지 여부를 반환합니다.
이것은 언제 어떻게 사용해야 합니까?
질문자 :Ovidiu Latcu
Android 4.2에 도입된 새로운 API를 살펴보고 있었습니다.UserManager
클래스를 보는 동안 다음 방법을 발견했습니다.
public boolean isUserAGoat()
이 호출을 하는 사용자가 순간이동의 대상인지 여부를 결정하는 데 사용됩니다.
이 호출을 하는 사용자가 염소인지 여부를 반환합니다.
이것은 언제 어떻게 사용해야 합니까?
Android R에서 이 메서드는 항상 false를 반환합니다. Google은 이것이 "염소 개인 정보를 보호하기 위해" 수행되었다고 말합니다.
/** * 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> * * <p>As of {@link android.os.Build.VERSION_CODES#R}, this method always returns * {@code false} in order to protect goat privacy.</p> * * @return Returns whether the user making this call is a goat. */ public boolean isUserAGoat() { if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) { return false; } return mContext.getPackageManager() .isPackageAvailable("com.coffeestainstudios.goatsimulator"); }
해당 소스 에서 메서드는 API 21에서 변경될 때까지 false
를 반환하는 데 사용되었습니다.
/** * 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; }
이 방법은 개발자인 우리에게 실제로 쓸모가 없는 것 같습니다. 누군가는 이전에 그것이 부활절 달걀 일 수 있다고 말했습니다.
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"); }
이것이 ""공식 사용 사례"인지는 모르겠지만 다음은 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
이 동작을 사용하여 Eclipse와 같은 IDE를 작동시킬 수 있다고 생각 하지만 이 편집은 4년 후의 일이며 사용할 Eclipse 환경이 없습니다.
이것은 Google의 내부 농담으로 보입니다. Google 크롬 작업 관리자에도 표시됩니다. 일부 엔지니어가 재미있다고 생각하는 것 외에는 목적이 없습니다. 당신이 원한다면 그 자체로 목적입니다.
Goats Teleported
열을 추가하려면 마우스 오른쪽 버튼을 클릭하십시오.너무 많은 순간 이동된 염소 에 대한 거대한 Chromium 버그 보고서도 있습니다.
다음 Chromium 소스 코드 조각 은 HN 주석에서 도용되었습니다.
int TaskManagerModel::GetGoatsTeleported(int index) const { int seed = goat_salt_ * (index + 1); return (seed >> 16) & 255; }
@djechlin의 보완 대답 (! 그런데 좋은 답변을),이 함수 호출은 일부 특정 반복 또는 예를 들어 특정 재귀 호출에 중지 할 때 IDE에 브레이크 포인트를 잡고 더미 코드로 사용할 수 있습니다 :
isUserAGoat()
는 IDE에 경고로 표시되는 더미 변수 선언 대신 사용할 수 있으며, Eclipse의 경우 특정 경우 중단점 표시를 막아 활성화/비활성화하기 어렵게 만듭니다. 메서드가 규칙으로 사용되는 경우 모든 호출은 나중에 일부 스크립트에 의해 필터링될 수 있습니다(커밋 단계 중에?).
Google 사용자는 Eclipse 사용자입니다(Android SDK, GAE 등의 Eclipse 플러그인으로 여러 프로젝트를 제공함). 따라서 @djechlin 답변과 이 보완 답변은 많은 의미가 있습니다(적어도 저에게는).
Android의 각 버전에는 재미있는 이름의 메소드/상수/무엇이든 있습니다.
내가 본 유일한 실제 사용은 참가자가 각 릴리스에 대한 API 차이점 보고서를 읽는지 확인하기 위해 특정 버전에 대한 것이 무엇인지 묻는 Google I/O 경연 대회의 마지막 호출이었습니다. 콘테스트에도 프로그래밍 문제가 있었지만 일반적으로 제출물의 수를 확인하기 쉬운 합리적인 금액으로 낮추기 위해 자동으로 먼저 등급을 매길 수 있는 몇 가지 퀴즈가 있었습니다.
음성 인식 분야에서 사용자는 염소 와 양 으로 나뉩니다.
예를 들어, 여기 89페이지 :
양은 음성 인식이 매우 잘 작동하는 사람이고 염소는 음성 인식이 매우 잘 작동하지 않는 사람입니다. 음성 인식기만 무엇이 그들을 구분하는지 압니다. 사람들은 누구의 목소리가 쉽게 인식되고 누구의 목소리가 인식되지 않을지 예측할 수 없습니다. 가장 좋은 정책은 모든 종류의 환경에서 모든 종류의 음성을 처리할 수 있도록 인터페이스를 설계하는 것입니다.
아마도 염소의 요구에 맞게 음성 인식 엔진을 구성할 수 있도록 향후 Android 사용자를 염소로 표시할 계획입니다. ;-)
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 문서에 명시된 것 이외의 목적으로 사용하기로 결정하면 문제가 발생합니다.
Google은 염소와 염소 기반 부활절 달걀을 매우 좋아합니다. 그것에 대한 이전 스택 오버플로 게시물도 있었습니다 .
이전 게시물에서 언급했듯이 Chrome 작업 관리자에도 존재합니다( 2009년에 처음 등장 ).
<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column"> Goats Teleported </message>
그런 다음 Windows, Linux 및 Mac 버전의 Chrome에서 2010년 초 ). "염소 순간이동"의 수는 사실 무작위입니다 .
int TaskManagerModel::GetGoatsTeleported(int index) const { int seed = goat_salt_ * (index + 1); return (seed >> 16) & 255; }
염소에 대한 다른 Google 참조는 다음과 같습니다.
내가 말할 수 있는 한, 염소와 Google의 가장 초기 상관 관계는 원래 "염소와 함께 깎기" 블로그 게시물에 속합니다.
false
를 반환하는 것을 제외하고는 실제 사용이 없다고 안전하게 가정할 수 있습니다.
MonkeyRunner 도구 를 사용 중인 경우 true를 반환하는 유사한 호출 isUserAMonkey()
SDK 설명은 이것만큼 궁금합니다.
public static boolean isUserAMonkey(){}
사용자 인터페이스가 현재 원숭이에 의해 엉망인 경우
true
반환합니다.
여기 소스가 있습니다.
나는 이것이 염소로 명명 된 새로운 SDK 도구를 예상하여 추가되었으며 실제로 해당 도구의 존재를 테스트하는 기능을 할 것으로 기대합니다.
또한 비슷한 질문인 ActivityManager의 이상한 기능: isUserAMonkey를 참조하세요. 이것은 무엇을 의미합니까, 그 용도는 무엇입니까? .
재미있는 부활절 달걀.
Ubuntu 버전의 Chrome에서는 작업 관리자( shift + esc )에서 마우스 오른쪽 버튼을 클릭하여 이탈리아어 버전에서 "Capre Teletrasportate"(Teleported Goats)인 공상 과학 열을 추가할 수 있습니다.
그것에 대한 재미있는 이론이 있습니다 .
속내 농담이 아니다.
분명히 Goat Simulator의 응용 프로그램 검사기일 뿐입니다 - Coffee Stain Studios 제작
염소 시뮬레이터가 설치되어 있으면 염소입니다. 설치하지 않으면 염소가 아닙니다.
나는 그것이 공통의 관심사를 가진 사람들을 찾을 가능성이 가장 높은 개발자 중 한 사람의 개인적인 실험이라고 생각합니다.
출처 : 여기를 클릭하세요
출처 : http:www.stackoverflow.com/questions/13375357/proper-use-cases-for-android-usermanager-isuseragoat
커밋되지 않은 기존 작업을 Git의 새 분기로 이동 (0) | 2021.10.05 |
---|---|
정규식을 사용하여 이메일 주소를 확인하려면 어떻게 해야 합니까? (0) | 2021.10.05 |
로컬 파일 시스템에서 파일을 삭제하지 않고 Git 리포지토리에서 파일 제거 (0) | 2021.10.05 |
함수에서 전역 변수 사용 (0) | 2021.10.05 |
git rebase 실행 취소 (0) | 2021.10.01 |