זיהוי של נעילת התעוררות שנוצרה על ידי ממשקי API אחרים

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

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

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

*alarm*

AlarmManager מקבל את נעילת ההתעוררות הזו ומשויך לאפליקציה הקוראת. AlarmManager מקבל את נעילת ההתעוררות כשהתראה מופיעה, ומשחרר את הנעילה כשהפעלת השיטה onReceive() של שידור ההתראה מסתיימת.

המלצה

כדי לבצע אופטימיזציה של התנהגות ההתראות, מומלץ לפעול לפי השיטות הבאות:

  • אפשר להשתמש ב-AlarmManager כדי לבצע אופטימיזציה של תדירות תזמון ההתראות.
  • משתמשים בהתראות RTC_WAKEUP (שמעוררות את המכשיר) רק במקרה הצורך.
  • כדאי לצמצם את השימוש בהתראות, ולהימנע מביצוע משימות ממושכות בשיטה onReceive().

AudioIn,‏ AudioMix וכו'

ממשקי ה-API של המדיה מקבלים מנעולי התעוררות שונים שהשמות שלהם מתחילים ב-Audio כשמפעילים או מצלמים אודיו. נעילת ההתעוררות משויכת לאפליקציה שקוראת ל-WakeLock.

הערך של AudioIn מתקבל במהלך הצילום של AudioRecord במצב מצלמת וידאו, בזמן שהמיקרופון פעיל. AudioMix נאסף במהלך ההפעלה של AudioTrack במכשיר. ממשקי API אחרים של מדיה עשויים לקבל נעילת התעוררות עם שמות אחרים שמתחילים ב-Audio.

המלצה

מומלץ לפעול לפי השיטות הבאות:

  • אסור להשתמש בשמות של חסימות מצב שינה שמתחילים ב-Audio.
  • אם אתם משתמשים בממשקי ה-API של המדיה, לא צריך לקבל את נעילת ההתעוררות ישירות. אתם יכולים להסתמך על ממשקי ה-API כדי לקבל את נעילת ההתעוררות הנדרשת.
  • כשמשתמשים בממשקי API של מדיה, צריך לסיים את סשן המדיה כשלא צריך אותו יותר.

GOOGLE_C2DM

GCM מקבל את נעילת ההתעוררות הזו בזמן שהוא מעביר שידור של Firebase Cloud Message ‏(FCM) לאפליקציה. נעילת ההתעוררות משוחררת בסיום הביצוע של השיטה onMessageReceived() לשידור FCM.

המלצה

כדי לבצע אופטימיזציה של התנהגות FCM, מומלץ לפעול לפי השיטות הבאות:

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

*job*/<package_name>/<package_and_job_name>

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

"<package_name>" הוא שם החבילה של האפליקציה, ולא הטקסט המילולי <package name>. באופן דומה, "<package_and_job_name>" הוא שם החבילה ואחריו שם המשימה. *job* הוא רצף התווים *job*, עם כוכביות. הכוכביות לא משמשות כתוים כלליים לחיפוש. דוגמה לשם של נעילת מצב שינה כזו:

*job*/com.example.app/com.example.app.example.path.ExampleJobService

המלצה

בדיקת השימוש במשימות של JobScheduler. במיוחד, כדאי לפעול לפי ההנחיות שלנו בנושא אופטימיזציה של השימוש בסוללה בממשקי API לתזמון משימות.

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

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

"<package_name>" הוא שם החבילה של האפליקציה, ולא הטקסט המילולי <package name>. *job* הוא רצף התווים *job*, עם כוכביות. הכוכביות לא משמשות כתוים כלליים לחיפוש.

המלצה

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

NetworkLocationLocator, FusedLocation *location*

שמות נעילת ההתעוררות האלה משמשים את LocationManager ו-FusedLocationProviderClient כדי לקבל את המיקום של המכשיר ולספק אותו. נעילת ההתעוררות משויכת לאפליקציה שהפעילה את ממשקי ה-API האלה.

המלצה

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

_UNKNOWN

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

המלצה

פועלים לפי השיטות המומלצות למתן שמות לחסימת מצב שינה, ומשתדלים לא להשתמש בפרטים אישיים מזהים בשם של חסימת מצב השינה. אם מוצאים נעילת הרשאה להפעלה (wake lock) בשם _UNKNOWN שמשויכת לאפליקציה, צריך לנסות לזהות איזו נעילת הרשאה להפעלה זו ולתת לה שם אחר.