מקרים לדוגמה

איך WHOOP הפחיתה את הסשנים של שימוש מופרז בחסימת מצב שינה חלקית ביותר מ-90%

משך הקריאה: 4 דקות

כשמפתחים אפליקציית Android למכשיר לביש, העבודה האמיתית מתחילה כשהמסך נכבה. WHOOP עוזרת למנויים להבין איך הגוף שלהם מגיב לאימונים, להתאוששות, לשינה ולמתח. למנויי WHOOP רבים ב-Android, סנכרון וקישוריות אמינים ברקע הם אלה שמאפשרים את התובנות האלה.

מוקדם יותר השנה, Google Play השיקה מדד חדש בתפקוד האפליקציה: חסימות חלקיות מרובות של מצב שינה. המדד הזה מציג את אחוז הסשנים של המשתמשים שבהם השימוש המצטבר בחסימת מצב שינה, שלא פטורה מהגבלות, חורג משעתיים בפרק זמן של 24 שעות. מטרת המדד הזה היא לעזור לכם לזהות מקורות אפשריים להתרוקנות הסוללה ולטפל בהם, כדי לספק חוויית משתמש מעולה.

החל מ-1 במרץ 2026, אפליקציות שלא יעמדו בסף האיכות עלולות להיות מוחרגות מפלטפורמות החיפוש של Google Play. יכול להיות שתוצג גם אזהרה בדף האפליקציה בחנות Google Play, שמציינת שהאפליקציה עלולה לצרוך יותר סוללה מהצפוי.

לדברי מאיאנק סאיני, מהנדס Android בכיר ב-WHOOP, "הדבר נתן לצוות הזדמנות לשפר את היעילות של Android", אחרי שהתכונה "תפקוד האפליקציה" סימנה את אחוז חסימות מצב השינה החלקיות של האפליקציה כ-15% – חריגה מהסף המומלץ של 5%.

mayank.png

הצוות ראה במדד תפקוד האפליקציה סימן ברור לכך שהעבודה ברקע גרמה למעבד (CPU) להישאר פעיל יותר זמן מהנדרש. פתרון הבעיה יאפשר להם להמשיך לספק חוויית משתמש נהדרת, ובמקביל לצמצם את הזמן המבוזבז ברקע ולשמור על קישוריות וסנכרון אמינים ובזמן אמת של Bluetooth.

זיהוי הבעיה

כדי להבין איפה להתחיל, הצוות פנה קודם כל לתפקוד האפליקציה כדי לקבל תובנות נוספות לגבי חסימות מצב השינה שהשפיעו על המדד. הם עיינו במרכז הבקרה של תפקוד האפליקציה בנושא חסימות חלקיות מוגזמות של מצב השינה, והצליחו לזהות שהגורם העיקרי לחסימות החלקיות המוגזמות של מצב השינה הוא אחד מה-workers של WorkManager (שמזוהה במרכז הבקרה בתור androidx.work.impl.background.systemjob.SystemJobService). כדי לתמוך בחוויית ה-always-on של WHOOP, האפליקציה משתמשת ב-WorkManager למשימות ברקע כמו סנכרון תקופתי ושליחת עדכונים חוזרים למכשיר הלביש. 

הצוות היה מודע לכך ש-WorkManager מפעיל חסימת מצב שינה בזמן ביצוע משימות ברקע, אבל לפני שהתווסף המדד "חסימות חלקיות רבות מדי של מצב שינה" לתפקוד האפליקציה, לא הייתה לו אפשרות לראות איך כל העבודה ברקע (מעבר ל-WorkManager) מתחלקת.

אחרי שמרכז הבקרה זיהה את WorkManager כגורם העיקרי, הצוות הצליח להתמקד בזיהוי ה-worker שתרם הכי הרבה לבעיה ולפעול כדי לפתור אותה.

שימוש במדדים ובנתונים פנימיים כדי לצמצם את הסיבות האפשריות

ב-WHOOP כבר הייתה תשתית פנימית למעקב אחרי מדדי WorkManager. הם עוקבים באופן קבוע אחרי:

  1. זמן ריצה ממוצע: כמה זמן ה-worker פועל?
  2. זמני קצובים לתפוגה: באיזו תדירות הזמן הקצוב לתפוגה של ה-worker נגמר במקום שהמשימה תושלם?
  3. ניסיונות חוזרים: באיזו תדירות ה-worker מנסה שוב אם הזמן הקצוב של העבודה הסתיים או שהיא נכשלה?
  4. ביטולים: באיזו תדירות העבודה בוטלה?

מעקב אחרי יותר מסתם הצלחות וכישלונות של העובדים נותן לצוות תמונה ברורה לגבי יעילות העבודה שלהם.

המדדים הפנימיים סימנו זמן ריצה ממוצע גבוה לכמה עובדים נבחרים, מה שאפשר להם לצמצם את החקירה עוד יותר. 

בנוסף למדדים הפנימיים, הצוות השתמש גם ב-Background Task Inspector של Android Studio כדי לבדוק את ה-workers הרלוונטיים ולנפות בהם באגים, תוך התמקדות ספציפית בחסימות מצב שינה משויכות, כדי להתאים למדד שסומן בתפקוד האפליקציה.

חקירה: הבחנה בין וריאנטים של Worker

חברת WHOOP משתמשת בתזמון חד-פעמי ובתזמון תקופתי לחלק מהעובדים. כך האפליקציה יכולה להשתמש שוב באותו לוגיקה של Worker למשימות זהות עם אותם קריטריונים להצלחה, שרק התזמון שלהן שונה.

בעזרת המדדים הפנימיים שלהם, הם הצליחו לצמצם את החיפוש ל-worker ספציפי, אבל הם לא הצליחו לדעת אם הבאג התרחש כשה-worker היה חד-פעמי, תקופתי או שניהם. לכן, הם השיקו עדכון לשימוש ב-setTraceTag method של WorkManager כדי להבחין בין הווריאציות החד-פעמיות והתקופתיות של אותו Worker.

הפרטים הנוספים האלה יאפשרו להם לזהות באופן ודאי איזה וריאנט של Worker (תקופתי או חד-פעמי) תרם הכי הרבה לסשנים עם חסימות מצב שינה חלקיות מוגזמות. עם זאת, הצוות הופתע כשהנתונים הראו שאף אחד מהווריאנטים לא תרם יותר מהשני.

מנמיט טוטג'ה, מהנדס Android II ב-WHOOP, אמר: "החלוקה הזו גם עזרה לנו לוודא שהבעיה מתרחשת בשתי הגרסאות, מה שהצביע על כך שהבעיה לא קשורה להגדרת התזמון, אלא ללוגיקה עסקית משותפת בהטמעה של ה-worker".

manmeet.png

בחינה מעמיקה של התנהגות העובדים וטיפול בשורש הבעיה

הצוות הבין שהוא צריך לבדוק את הלוגיקה בתוך ה-worker,  ובחן מחדש את ההתנהגות של ה-workers שסומנו במהלך החקירה. באופן ספציפי, הם חיפשו מקרים שבהם העבודה נתקעה ולא הושלמה.

כל זה הוביל למציאת שורש הבעיה של חסימות מצב השינה המוגזמות:

‫CoroutineWorker שנועד להמתין לחיבור לחיישן WHOOP לפני שהוא ממשיך. 

אם העבודה התחילה בלי חיישן מחובר, whoopSensorFlow – שמציין אם החיישן מחובר – היה null. ה-SensorWorker לא התייחס לזה כתנאי ליציאה מוקדמת והמשיך לפעול, כך שלמעשה הוא המתין לחיבור ללא הגבלת זמן. כתוצאה מכך, WorkManager החזיק חסימת מצב שינה חלקית עד שהזמן הקצוב לתפוגה של העבודה הסתיים, מה שהוביל לשימוש גבוה בחסימת מצב שינה ברקע ולתזמון מחדש תכוף ולא רצוי של SensorWorker.

כדי לטפל בבעיה, הצוות של WHOOP עדכן את הלוגיקה של ה-worker כך שתבדוק את סטטוס החיבור לפני שהיא מנסה להפעיל את הלוגיקה העסקית העיקרית.

אם החיישן לא זמין, ה-worker יוצא, וכך נמנע תרחיש של זמן קצוב לתפוגה ומשתחררת חסימת מצב השינה. בקטע הקוד הבא מוצג הפתרון:

class SensorWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) {
   override suspend fun doWork(): Result {
      ...
      // Check the sensor state and perform work or return failure
       return whoopSensorFlow.replayCache
            .firstOrNull()
            ?.let { cachedData ->
                processSensorData(cachedData)
                Result.success()
            } ?: run {
                Result.failure()
            }
}

הפחתה של 90% בסשנים עם שימוש מוגזם בחסימות מצב שינה חלקיות

אחרי השקת התיקון, הצוות המשיך לעקוב אחרי לוח הבקרה של תפקוד האפליקציה כדי לוודא שהשינויים השפיעו. 

בסופו של דבר, אחוז חסימות מצב השינה החלקיות המוגזמות של WHOOP ירד מ-15% לפחות מ-1% תוך 30 ימים בלבד אחרי הטמעת השינויים ב-Worker. 

partialWake.png

בעקבות השינויים, הצוות הבחין בפחות מקרים שבהם העבודה לא הושלמה בגלל שהזמן הקצוב לתפוגה נגמר, וכתוצאה מכך זמני ההרצה הממוצעים התקצרו. 

העצה של צוות WHOOP למפתחים אחרים שרוצים לשפר את היעילות של העבודה ברקע:

sarthak.png

איך מתחילים

אם אתם רוצים לנסות לצמצם את מספר חסימות מצב השינה החלקיות המרובות באפליקציה או לשפר את יעילות ה-worker, אתם יכולים לעיין במדד של חסימות מצב שינה חלקיות מרובות באפליקציה בקטע תפקוד האפליקציה, ולעיין במסמכי התיעוד בנושא חסימות מצב שינה כדי לקבל מידע נוסף על שיטות מומלצות ואסטרטגיות לניפוי באגים. 

כותב/ת המסמך:
להמשך קריאה