פלטפורמת Android 16 כוללת שינויים בהתנהגות שעשויים להשפיע על האפליקציה שלכם. השינויים הבאים בהתנהגות חלים על כל האפליקציות כשהן פועלות ב-Android 16, ללא קשר ל-targetSdkVersion
. מומלץ לבדוק את האפליקציה ואז לשנות אותה לפי הצורך כדי לתמוך בשינויים האלה, במקרים הרלוונטיים.
חשוב גם לעיין ברשימת השינויים בהתנהגות שמשפיעים רק על אפליקציות שמטרגטות ל-Android 16.
פונקציונליות עיקרית
Android 16 כולל את השינויים הבאים, שמשנה או מרחיבים יכולות ליבה שונות של מערכת Android.
אופטימיזציה של מכסות ב-JobScheduler
החל מ-Android 16, אנחנו משנים את המכסה של זמן הריצה לביצוע משימות רגילות ומשימות מואצות על סמך הגורמים הבאים:
- הקטגוריה של האפליקציה במצב המתנה: ב-Android 16, קטגוריות פעילות של אפליקציות במצב המתנה יתחילו להיות מופעלות באמצעות מכסה נדיבה של זמן ריצה.
- אם המשימה מתחילה לפעול בזמן שהאפליקציה במצב 'מופעלת': ב-Android 16, משימות שהתחילו לפעול בזמן שהאפליקציה גלויה למשתמש והמשיכו לפעול אחרי שהאפליקציה הפכה לבלתי נראית, יעמדו במכסת זמן הריצה של המשימה.
- אם המשימה פועלת בזמן הפעלת שירות שפועל בחזית: ב-Android 16, משימות שפועלות בו-זמנית עם שירות שפועל בחזית יעמדו במכסת זמן הריצה של המשימה. אם אתם משתמשים במשימות להעברת נתונים ביוזמת משתמש, כדאי להשתמש במקום זאת במשימות להעברת נתונים ביוזמת משתמש.
השינוי הזה משפיע על משימות שתזמנתם באמצעות WorkManager, JobScheduler ו-DownloadManager. כדי לנפות באגים ולברר למה המשימה הופסקה, מומלץ לקרוא ל-WorkInfo.getStopReason()
כדי לתעד את הסיבה להפסקה (במשימות של JobScheduler, צריך לקרוא ל-JobParameters.getStopReason()
).
למידע נוסף על שיטות מומלצות לאופטימיזציה של השימוש בסוללה, ראו ההנחיות בנושא אופטימיזציה של השימוש בסוללה לממשקי API לתזמון משימות.
מומלץ גם להשתמש ב-API החדש JobScheduler#getPendingJobReasonsHistory
שנוסף ב-Android 16 כדי להבין למה משימה לא בוצעה.
בדיקה
כדי לבדוק את ההתנהגות של האפליקציה, אפשר להפעיל שינוי של אופטימיזציות מסוימות של מכסות משימות, כל עוד האפליקציה פועלת במכשיר עם Android מגרסה 16 ואילך.
כדי להשבית את האכיפה של 'מצב העליון יתאים למכסה של זמן הריצה של המשימה', מריצים את הפקודה הבאה adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
כדי להשבית את האכיפה של 'משימות שפועלות בו-זמנית עם שירות בחזית יתחייבו למכסת זמן הריצה של המשימה', מריצים את הפקודה הבאה של adb
:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
כדי לבדוק התנהגות מסוימת של קטגוריית האפליקציה במצב המתנה, אפשר להגדיר את קטגוריית האפליקציה במצב המתנה באמצעות הפקודה adb
הבאה:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
כדי להבין באיזו קטגוריה של אפליקציות במצב המתנה האפליקציה נמצאת, אפשר לקבל את קטגוריית האפליקציות במצב המתנה של האפליקציה באמצעות הפקודה adb
הבאה:
adb shell am get-standby-bucket APP_PACKAGE_NAME
הוצאה משימוש מלאה של JobInfo#setImportantWhileForeground
השיטה JobInfo.Builder#setImportantWhileForeground(boolean)
מציינת את מידת החשיבות של משימה בזמן שאפליקציית התזמון נמצאת בחזית או כשהיא פטורה באופן זמני מההגבלות על משימות ברקע.
השיטה הזו הוצאה משימוש בגרסה Android 12 (רמת API 31). החל מגרסה Android 16, היא כבר לא פועלת בצורה יעילה והקריאה לשיטה הזו תתעלם.
הסרת הפונקציונליות הזו חלה גם על JobInfo#isImportantWhileForeground()
. החל מגרסה Android 16, אם השיטה נקראת, היא מחזירה את הערך false
.
חוויית משתמש וממשק המשתמש של המערכת
Android 16 כולל את השינויים הבאים, שנועדו ליצור חוויית משתמש עקבית ואינטואיטיבית יותר.
הוצאה משימוש של הודעות מפריעות בנושא נגישות
ב-Android 16 הופסקה התמיכה בהודעות נגישות, שמתאפיינות בשימוש ב-announceForAccessibility
או בשליחת אירועי נגישות מסוג TYPE_ANNOUNCEMENT
. כתוצאה מכך, חוויית המשתמש של משתמשי TalkBack וקורא המסך של Android עשויה להיות לא עקבית. חלופות יכולות לעזור לטפל בטווח רחב יותר של צרכים של משתמשים במגוון טכנולוגיות העזרה של Android.
דוגמאות לחלופות:
- לשינויים משמעותיים בממשק המשתמש, כמו שינויים בחלונות, צריך להשתמש ב-
Activity.setTitle(CharSequence)
וב-setAccessibilityPaneTitle(java.lang.CharSequence)
. ב-Compose, משתמשים ב-Modifier.semantics { paneTitle = "paneTitle" }
- כדי להודיע למשתמש על שינויים בממשק המשתמש הקריטי, משתמשים ב-
setAccessibilityLiveRegion(int)
. בחלונית הכתיבה, משתמשים ב-Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. מומלץ להשתמש בהם במשורה, כי הם עלולים ליצור הודעות בכל פעם שנתונים מתעדכנים בתצוגה. - כדי להודיע למשתמשים על שגיאות, שולחים
AccessibilityEvent
מסוגAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
ומגדירים אתAccessibilityNodeInfo#setError(CharSequence)
, או משתמשים ב-TextView#setError(CharSequence)
.
במסמכי העזרה של ממשק ה-API announceForAccessibility
, שהוצא משימוש, מופיעים פרטים נוספים על חלופות מוצעות.