חברת 2K מפחיתה את שיעור ה-ANR ב-35% בעזרת Android Game Development Kit

רקע

Cat Daddy Games הוא סטודיו בבעלות מלאה של 2K שנמצא בקירקלנד, וושינגטון, והוא המפתח של NBA 2K Mobile. הצוות רצה לשפר את האיכות והיציבות הכוללות של המשחקים, במיוחד על ידי צמצום של שגיאות מסוג 'האפליקציה לא מגיבה' (ANR). אירועי ANR מתרחשים כששרשור ה-UI של אפליקציית Android חסום במשך זמן רב מדי. במקרה כזה, השרשור הראשי של האפליקציה, שאחראי על עדכון ממשק המשתמש, לא יכול לצייר או לעבד אירועי קלט של משתמשים, וכתוצאה מכך המשתמשים מתוסכלים. אם האפליקציה פועלת בחזית, המערכת מציגה תיבת דו-שיח שמאפשרת למשתמש לסגור את האפליקציה בכוח.

מה הם עשו

צמצום מספר האירועים מסוג ANR היה בעדיפות גבוהה ב-Cat Daddy. צוות ה-QA עבד ללא הפסקה וזיהה דפוס נפוץ של שגיאות ANR: הם גילו שכאשר האפליקציה הושהתה ואז הופעלה מחדש במהירות, כמות גדולה של קלט מגע עלולה לגרום לשגיאת ANR. בדיקה נוספת באמצעות Firebase Crashlytics הראתה ששגיאת ה-ANR הזו הייתה מסוג android.os.MessageQueue.nativePollOnce, הסוג הנפוץ ביותר של שגיאות ANR ב-NBA 2K Mobile.

בנוסף, ב-Cat Daddy הבינו שהטיפול המשופר בקלט ב-GameActivity יכול למנוע את סוג שגיאות ה-ANR הזה, ולכן החליטו לעבור ל-GameActivity.

GameActivity הוא רכיב של Android Game Development Kit, שנועד לעזור למשחקים ל-Android לעבד פקודות של מחזור האפליקציה, אירועי קלט וקלט טקסט בקוד C/C++ של האפליקציה. ב-GameActivity יש כמה שיפורים שמתמקדים במשחקים בהשוואה ל-NativeActivity, כמו Fragment, עיבוד ל-SurfaceView ותמיכה נוספת בספריות פופולריות שקשורות לפיתוח משחקים.

ב-GameActivity נעשה גם שימוש בשני מאגרי נתונים (double buffering) במאגר הקלט, שמאפשר למשחק לטפל טוב יותר במקרה הזה של נפח קלט גבוה.

תוצאות

בעזרת הטמעת GameActivity, צוות Cat Daddy הצליח לשפר באופן משמעותי את טיפול הקלט במשחק, וכתוצאה מכך ירדה ב-35% כמות שגיאות ה-ANR. כך שיפרנו את חוויית המשתמש ויצאנו חוויית משחק יציבה יותר.

כתוספת יתרון, מכיוון ש-GameActivity עובר בירושה מ-FragmentActivity,‏ CatDaddy הצליחה גם לשלב את EmbeddedWebView ואת EmbeddedVideoView, שנדרשו לחלק מהשילובים הפופולריים ביותר של משחקים חברתיים.

שנתחיל?

משפרים את חוויית המשחק בעזרת GameActivity ושאר הרכיבים של Android Game Development Kit.