Pertanyaan Kasus penggunaan yang tepat untuk Android UserManager.isUserAGoat ()?


Saya melihat API baru yang diperkenalkan Android 4.2. Saat melihat UserManager kelas saya menemukan metode berikut:

 public boolean isUserAGoat()

Digunakan untuk menentukan apakah pengguna yang membuat panggilan ini tunduk pada teleportasi.

Mengembalikan apakah pengguna yang membuat panggilan ini adalah seekor kambing.

Bagaimana dan kapan ini harus digunakan?


3140
2017-11-14 08:34


asal


Jawaban:


Dari mereka sumber, metode yang digunakan untuk kembali false hingga diubah dalam API 21.

/**
 * 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;
}

Sepertinya metode ini tidak memiliki kegunaan nyata bagi kami sebagai pengembang. Seseorang sebelumnya menyatakan bahwa itu mungkin sebuah telur Paskah.

Dalam API 21, pelaksanaannya diubah untuk memeriksa apakah ada aplikasi yang diinstal dengan paket tersebut 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");
}

Ini dia tautan sumber


1512
2017-11-14 08:40



Saya tidak tahu apakah ini adalah kasus penggunaan "resmi", tetapi berikut ini menghasilkan peringatan di Java (yang selanjutnya dapat menghasilkan kesalahan kompilasi jika dicampur dengan return pernyataan, mengarah ke kode yang tidak dapat dijangkau):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

Namun ini legal:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

Jadi saya sering menemukan diri saya menulis metode utilitas konyol untuk cara tercepat untuk mem-blok kode, kemudian dalam menyelesaikan debugging menemukan semua panggilan untuk itu, jadi asalkan implementasi tidak mengubah ini dapat digunakan untuk itu.

JLS menunjukkan if (false) tidak memicu "kode tidak terjangkau" karena alasan tertentu bahwa ini akan merusak dukungan untuk flag debug, yaitu pada dasarnya kasus penggunaan ini (h / t @auselen). (static final boolean DEBUG = false; contohnya).

Saya diganti while untuk if, menghasilkan kasus penggunaan yang lebih tidak jelas. saya percaya Anda dapat menjelajah IDE, seperti Eclipse, dengan perilaku ini, tetapi pengeditan ini adalah 4 tahun ke depan, dan saya tidak memiliki lingkungan Eclipse untuk dimainkan.


916
2017-11-14 14:47



Tampaknya ini lelucon di Google. Ini juga ditampilkan di task manager Google Chrome. Tidak ada gunanya, selain beberapa insinyur merasa itu lucu. Yang merupakan tujuan dengan sendirinya, jika Anda mau.

  1. Di Chrome, buka Pengelola Tugas dengan Bergeser+ESC.
  2. Klik kanan untuk menambahkan Goats Teleported kolom.
  3. Bertanya-tanya.

Bahkan ada laporan bug Chromium yang sangat besar terlalu banyak kambing teleportasi.

chrome 

Chromium berikut cuplikan kode sumber dicuri dari HN komentar.

int TaskManagerModel::GetGoatsTeleported(int index) const {
  int seed = goat_salt_ * (index + 1);
  return (seed >> 16) & 255;
}

706
2017-11-14 09:03



Melengkapi @djechlin menjawab (jawaban yang bagus dengan cara!), panggilan fungsi ini bisa juga digunakan sebagai kode boneka untuk menahan breakpoint dalam IDE ketika Anda ingin berhenti di beberapa iterasi tertentu atau panggilan rekursif tertentu, misalnya:

enter image description here

isUserAGoat() dapat digunakan sebagai pengganti deklarasi variabel boneka yang akan ditampilkan dalam IDE sebagai peringatan dan, dalam kasus Eclipse tertentu, akan menyumbat tanda breakpoint, sehingga sulit untuk mengaktifkan / menonaktifkannya. Jika metode ini digunakan sebagai konvensi, semua permintaan dapat disaring kemudian oleh beberapa skrip (selama fase commit mungkin?).

enter image description here

Google guys adalah pengguna Eclipse yang berat (mereka menyediakan beberapa proyek mereka sebagai plugin Eclipse: Android SDK, GAE, dll), jadi jawaban @djechlin dan jawaban komplementer ini sangat masuk akal (setidaknya untuk saya).


258
2017-11-21 16:55



Ada metode bernama lucu / konstan / apa pun di setiap versi Android.

Satu-satunya penggunaan praktis yang pernah saya lihat adalah dalam Panggilan Terakhir untuk Google I / O Kontes di mana mereka bertanya apa itu untuk versi tertentu, untuk melihat apakah kontestan membaca laporan diff API untuk setiap rilis. Kontes ini memiliki masalah pemrograman juga, tetapi umumnya beberapa hal sepele yang dapat dinilai secara otomatis terlebih dahulu untuk mendapatkan jumlah pengiriman ke jumlah yang wajar yang akan lebih mudah untuk diperiksa.


122
2017-11-14 17:26



Dalam disiplin pengenalan suara, pengguna dibagi menjadi kambing dan domba-domba.

Misalnya, di sini di halaman 89:

Sheeps adalah orang-orang yang pengenalan ucapannya bekerja dengan sangat baik, dan kambing adalah orang yang bekerja dengan sangat buruk. Hanya pengenal suara yang tahu apa yang memisahkan mereka. Orang tidak dapat memprediksi suara siapa yang akan dikenali dengan mudah dan siapa yang tidak. Kebijakan terbaik adalah merancang antarmuka agar dapat menangani semua jenis suara dalam semua jenis lingkungan

Mungkin, direncanakan untuk menandai pengguna Android sebagai kambing di masa depan untuk dapat mengkonfigurasi mesin pengenalan suara untuk kebutuhan kambing. ;-)


110
2018-05-31 09:33



Google sangat menyukai kambing dan kambing Telur Paskah. Bahkan ada posting Stack Overflow sebelumnya tentang hal itu.

Seperti yang telah disebutkan di posting sebelumnya, itu juga ada dalam task manager Chrome (pertama kali muncul di alam liar pada tahun 2009):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

Dan kemudian di Windows, Linux dan Mac versi Chrome awal 2010). Jumlah "Kambing Teleportasi" sebenarnya acak:

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

Referensi Google lainnya untuk kambing termasuk:

Korelasi kambing yang paling awal dan Google termasuk dalam posting blog "Memotong dengan kambing" asli, sejauh yang saya tahu.

Kita dapat berasumsi bahwa itu hanya telur Paskah dan tidak memiliki penggunaan di dunia nyata, kecuali untuk kembali false.


104
2017-11-15 10:33