java - حالات الاستخدام المناسبة لـ Android UserManager.isUserAGoat()؟




(8)

استكمالا answer djechlin ( answer جيدة من جانب الطريق!) ، يمكن استخدام هذه الوظيفة أيضًا كرمز وهمي لاحتواء نقطة توقف في بيئة تطوير متكاملة (IDE) عندما تريد التوقف في بعض التكرار المحدد أو استدعاء تكراري معين ، على سبيل المثال:

يمكن استخدام isUserAGoat() بدلاً من تعريف متغير وهمية سيتم إظهاره في IDE كتحذير و ، في حالة Eclipse معينة ، سداد علامة نقطة الإيقاف ، مما يجعل من الصعب تمكين / تعطيله. إذا تم استخدام الطريقة كإتفاقية ، يمكن أن تتم تصفية جميع الدعوات في وقت لاحق من خلال بعض البرامج النصية (خلال مرحلة الالتزام ربما؟).

إن مستخدمي Google هم من مستخدمي Eclipse الثقيلة (يقدمون العديد من مشاريعهم كمكونات Eclipse الإضافية: Android SDK و GAE وغيرها) ، لذا فإن الإجابة علىdjechlin وهذه الإجابة التكميلية لها معنى كبير (على الأقل بالنسبة لي).

كنت أبحث في واجهات برمجة التطبيقات الجديدة التي تم تقديمها في Android 4.2 . أثناء النظر إلى فئة UserManager صادفت الطريقة التالية:

public boolean isUserAGoat()

تُستخدم لتحديد ما إذا كان المستخدم الذي يقوم بإجراء هذه المكالمة خاضعًا لعمليات النقل الأوتوماتيكي.

إرجاع ما إذا كان المستخدم الذي يجري هذه المكالمة هو عنزة.

كيف ومتى ينبغي أن تستخدم؟


تحظى 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 ينتمي إلى المشاركة الأصلية في مدونة "Mowing with goats" ، بقدر ما أستطيع أن أقول.

يمكننا أن نفترض بأمان أنه مجرد بيضة عيد الفصح وليس لها استخدام في العالم الحقيقي ، باستثناء العودة false .


لا أعرف ما إذا كانت هذه هي حالة الاستخدام "الرسمية" ، ولكن ما يلي ينتج تحذيرًا في 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 / tauselen). (القيمة static final boolean DEBUG = false; على سبيل المثال).

أنا محل في while ل ، if ، إنتاج حالة استخدام أكثر غموضا. أعتقد أنه يمكنك تحريك IDE الخاص بك ، مثل Eclipse ، مع هذا السلوك ، ولكن هذا التعديل هو 4 سنوات في المستقبل ، وليس لدي بيئة Eclipse للعب معها.


مضحك عيد الفصح البيض.
في إصدار Ubuntu من Chrome ، في مدير المهام ( shift + esc ) ، بالنقر بزر الفأرة الأيمن ، يمكنك إضافة عمود sci-fi في إصدار اللغة الإيطالية هو "Capre Teletrasportate" (الماعز المسمى Teleported Goats).

نظرية مضحكة حول هذا الموضوع here .


هناك أسلوب مضحك اسمه / ثابت / أيا كان في كل إصدار من Android.

كان الاستخدام العملي الوحيد الذي شاهدته في مسابقة Last Call for Google I / O Contest حيث سألنا عما كان عليه لإصدار معين ، لمعرفة ما إذا كان المتسابقون يقرأون تقرير فرق API لكل إصدار. كان لدى المسابقة مشكلات في البرمجة أيضًا ، ولكن بشكل عام بعض التوافقات التي يمكن تصنيفها تلقائيًا أولاً للحصول على عدد عمليات الإرسال إلى مبالغ معقولة يسهل التحقق منها.


يبدو أن هذه مزحة داخل Google. كما تم تمييزه أيضًا في مدير مهام Google Chrome. ليس لها أي غرض ، بخلاف بعض المهندسين يجدونها مسلية. وهو غرض في حد ذاته ، إذا صح التعبير.

  1. في Chrome ، افتح مدير المهام مع Shift + Esc .
  2. انقر بزر الماوس الأيمن لإضافة العمود Goats Teleported .
  3. يتساءل.

بل هناك تقرير ضخم عن خلل Chromium عن الكثير من الماعز التي تنتقل عن بعد .

يتم سرقة مقتطف شفرة مصدر Chromium التالي من تعليقات HN .

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

يوجد استدعاء مشابهة isUserAMonkey() ، التي ترجع true إذا تم استخدام أداة MonkeyRunner . التفسير SDK هو مجرد فضول مثل هذا واحد.

public static boolean isUserAMonkey(){}     

إرجاع true إذا كانت واجهة المستخدم مفسدة حاليًا بواسطة قرد.

Here هو المصدر.

أتوقع أن يتم إضافة هذا تحسبًا لأداة SDK جديدة تسمى شيئًا من الماعز وستكون فعلية لاختبار وجود هذه الأداة.

انظر أيضا سؤال مماثل ، وظيفة غريبة في ActivityManager: isUserAMonkey. ماذا يعني هذا ، ما هو استخدامه؟ .


بدءًا من 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 لكل جهاز يقوم الآن بإرجاع قيمة عشوائية ظاهريًا: إذا تم دفن ذلك بشكل عميق بما فيه الكفاية في شفرتك ، فقد يستغرق الأمر وقتًا طويلاً لمعرفة مصدر أخطاءك الجديدة.

الخلاصة: إذا كنت لا تتحكم في تنفيذ طريقة ما وتقرر استخدامها لأغراض أخرى غير المذكورة في وثائق واجهة برمجة التطبيقات ، فأنت تتجه إلى المتاعب.





usermanager