תכונות וממשקי API ב-Android 10

‫Android 10 כולל תכונות ויכולות נהדרות למשתמשים ולמפתחים. במסמך הזה מוסבר מה זמין למפתחים.

כדי לקבל מידע על ממשקי ה-API, אפשר לקרוא את דוח ההבדלים בין ממשקי ה-API או לעיין בהפניית Android API ולחפש ממשקי API שנוספו ברמת API‏ 29. כדאי גם לעיין בשינויים בהתנהגות של Android 10 (באפליקציות שמטרגטות רמת API 29 ובכל האפליקציות), וגם בשינויים בפרטיות, כדי לקבל מידע על תחומים שבהם שינויים בפלטפורמה עשויים להשפיע על האפליקציות שלכם.

שיפורים באבטחה

ב-Android 10 נוספו כמה תכונות אבטחה, שמסוכמות בקטעים הבאים.

תיבות דו-שיח משופרות לאימות ביומטרי

ב-Android 10 נוספו השיפורים הבאים לתמיכה באימות ביומטרי:

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

הפעלת קוד DEX מוטמע ישירות מ-APK

החל מ-Android 10, אפשר להגדיר לפלטפורמה להריץ קוד DEX מוטמע ישירות מקובץ ה-APK של האפליקציה. האפשרות הזו יכולה לעזור למנוע מתקפה אם תוקף יצליח לשנות את הקוד שקומפל באופן מקומי במכשיר.

מידע נוסף זמין במאמר בנושא הפעלת קוד DEX מוטמע ישירות מ-APK.

תמיכה ב-TLS 1.3

ב-Android 10 נוספה תמיכה ב-TLS 1.3. ‫TLS 1.3 הוא עדכון משמעותי לתקן TLS שכולל שיפורים בביצועים ובאבטחה. מבדיקות הביצועים שלנו עולה שאפשר ליצור חיבורים מאובטחים מהר יותר ב-40% עם TLS 1.3 בהשוואה ל-TLS 1.2.

פרטים נוספים על ההטמעה של TLS 1.3 זמינים בקטע TLS בדף בנושא שינויים בהתנהגות של כל האפליקציות.

Public Conscrypt API

החל מ-Android 10, ספק האבטחה Conscrypt כולל API ציבורי לפונקציונליות של TLS.

האוסף של המחלקות ב-android.net.ssl מכיל שיטות סטטיות לגישה לפונקציונליות שלא זמינה מממשקי ה-API הכלליים של javax.net.ssl. אפשר להסיק את השמות של המחלקות האלה כצורת הרבים של המחלקה javax.net.ssl המתאימה. לדוגמה, קוד שפועל על מופעים של javax.net.ssl.SSLSocket יכול במקום זאת להשתמש בשיטות מ-SSLSockets.

תכונות קישוריות

‫Android 10 כולל כמה שיפורים שקשורים לרשת ולקישוריות.

‫Wi-Fi network connection API

ב-Android 10 נוספה תמיכה בחיבורים ישירים מקצה לקצה. התכונה הזו מאפשרת לאפליקציה להציג למשתמש בקשה לשנות את נקודת הגישה שהמכשיר מחובר אליה באמצעות WifiNetworkSpecifier כדי לתאר מאפיינים של רשת מבוקשת. החיבור בין העמיתים משמש למטרות שלא קשורות לאספקת רשת, כמו אתחול הגדרות למכשירים משניים כמו Chromecast ורכיבי חומרה של Google Home.

מידע נוסף זמין במאמר בנושא Wi-Fi Network Request API לקישוריות ישירה מקצה לקצה.

Wi-Fi network suggestion API

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

מידע נוסף על התכונה הזו זמין במאמר בנושא הצעות לרשתות Wi-Fi.

שיפורים במצבי ביצועים גבוהים וזמן אחזור נמוך ב-Wi-Fi

ב-Android 10 אפשר לספק רמז למודם הבסיסי כדי למזער את זמן האחזור.

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

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

חיפושים מיוחדים ב-DNS resolver

ב-Android 10 נוספה תמיכה מקורית בחיפושי DNS מיוחדים באמצעות חיפושים בטקסט גלוי ומצב DNS-over-TLS. בעבר, פותר ה-DNS של הפלטפורמה תמך רק ברשומות A ו-AAAA, שמאפשרות לחפש רק את כתובות ה-IP שמשויכות לשם, אבל לא תמך בסוגים אחרים של רשומות. ‫DnsResolver API מספק פתרון כללי ואסינכרוני, שמאפשר לכם לחפש SRV, NAPTR וסוגים אחרים של רשומות. שימו לב: האפליקציה היא זו שמבצעת את הניתוח של התגובה.

לגבי אפליקציות שמבוססות על NDK, אפשר לעיין במאמר בנושא android_res_nsend.

חיבור קל ל-Wi-Fi

ב-Android 10 אפשר להשתמש בחיבור קל כדי להקצות אישורים של Wi-Fi למכשיר עמית, כתחליף ל-WPS שהוצא משימוש. אפליקציות יכולות לשלב את Easy Connect בתהליך ההגדרה וההקצאה שלהן באמצעות כוונת ACTION_PROCESS_WIFI_EASY_CONNECT_URI.

מידע נוסף על התכונה הזו זמין במאמר בנושא חיבור קל ל-Wi-Fi.

Wi-Fi Direct connection API

ב-Android 10, יש עדכונים למחלקות ה-API‏ WifiP2pConfig ו-WifiP2pManager כדי לתמוך ביכולות של יצירת חיבור מהיר ל-Wi-Fi Direct באמצעות מידע שנקבע מראש. המידע הזה משותף באמצעות ערוץ צדדי, כמו Bluetooth או NFC.

בדוגמת הקוד הבאה מוצג אופן יצירת קבוצה באמצעות מידע שנקבע מראש:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

כדי להצטרף לקבוצה באמצעות פרטי כניסה, מחליפים את manager.createGroup() באחת מהאפשרויות הבאות:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

ערוצים מבוססי-חיבור (CoC) ב-Bluetooth LE

‫Android 10 מאפשר לאפליקציה שלכם להשתמש בחיבורי BLE CoC כדי להעביר זרמי נתונים גדולים יותר בין שני מכשירי BLE. הממשק הזה מבצע הפשטה של Bluetooth ומנגנוני קישוריות כדי לפשט את ההטמעה.

תכונות טלפוניה

‫Android 10 כולל כמה שיפורים שקשורים לטלפוניה.

שיפורים באיכות השיחה

ב-Android 10 נוספה האפשרות לאסוף מידע על האיכות של שיחות מתמשכות ב-IP Multimedia Subsystem‏ (IMS), כולל איכות השיחה אל הרשת וממנה, במכשירים שתומכים בתכונה הזו.

סינון שיחות וזיהוי מתקשר

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

Call redirection service API

ב-Android 10, יש שינוי באופן הטיפול בכוונות לביצוע שיחות. השידור NEW_OUTGOING_CALL הוצא משימוש והוחלף ב-API ‏CallRedirectionService. ממשקי ה-API של CallRedirectionService מאפשרים לכם לשנות שיחות יוצאות שמתבצעות על ידי פלטפורמת Android. לדוגמה, אפליקציות של צד שלישי עשויות לבטל שיחות ולהפנות אותן מחדש דרך VoIP.

שיפורים ביצירת קבצים באחסון חיצוני

בנוסף להשקת נפח אחסון ייעודי לאפליקציות,‏ Android 10 מוסיפה את היכולות הבאות שקשורות לאחסון חיצוני:

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

מדיה וגרפיקה

ב-Android 10 הוספנו את התכונות והממשקי API החדשים הבאים שקשורים למדיה ולגרפיקה:

שיתוף קלט אודיו

ב-Android 10 נוספה האפשרות לשתף את קלט האודיו בין שתי אפליקציות בו-זמנית. מידע נוסף זמין במאמר בנושא שיתוף קלט אודיו.

צילום מסך של הפעלת אודיו

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

סרגל שליטה בהתראות בסגנון מדיה

החל מ-Android 10, בהתראות של MediaStyle מוצג סרגל ניווט. בסרגל לדילוג בסרטון מוצגת התקדמות ההפעלה מ-PlaybackState.getPosition(), ובמקרים מסוימים אפשר להשתמש בסרגל כדי לדלג למיקום בתוכנית שמופעלת. הכללים הבאים קובעים את המראה וההתנהגות של סרגל ההתקדמות:

  • סרגל ההתקדמות מופיע אם יש באמפר פעיל MediaSession והמשך שלו (שמצוין על ידי MediaMetadata.METADATA_KEY_DURATION) גדול מאפס. המשמעות היא שהפס לא מופיע בשידורים לא קבועים כמו שידורים חיים ושידורי רדיו.
  • אם בסשן מיושם ACTION_SEEK_TO, המשתמש יכול לגרור את סרגל ההתקדמות כדי לשלוט במיקום ההפעלה.

Native MIDI API

‫Android Native MIDI API‏ (AMidi) מאפשר למפתחי אפליקציות לשלוח ולקבל נתוני MIDI באמצעות קוד C/C++, ומשתלב בצורה הדוקה יותר עם לוגיקת השמע/הבקרה של C/C++, ומצמצם את הצורך ב-JNI.

מידע נוסף זמין במאמר בנושא Android Native MIDI API.

שיפורים ב-MediaCodecInfo

ב-Android 10 נוספו methods ל-MediaCodecInfo שמציגים מידע נוסף על קודק.

מידע נוסף זמין במאמר בנושא קודקים של מדיה.

Thermal API

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

ב-Android 10, אפליקציות ומשחקים יכולים להשתמש ב-Thermal API כדי לעקוב אחרי שינויים במכשיר ולנקוט פעולות לשמירה על צריכת חשמל נמוכה יותר, כדי להחזיר את הטמפרטורה למצב תקין. אפליקציות רושמות מאזין ב-PowerManager, שדרכו המערכת מדווחת על מצב תרמי שוטף בטווח שבין קל ובינוני לבין חמור, קריטי, חירום וכיבוי.

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

ממשק ה-API של Thermal דורש שכבת HAL חדשה במכשיר – הוא נתמך כרגע במכשירי Pixel עם Android 10, ואנחנו פועלים בשיתוף עם השותפים שלנו, יצרני המכשירים, כדי להרחיב את התמיכה במערכת האקולוגית במהירות האפשרית.

מצלמה ותמונות

ב-Android 10 הוספנו את התכונות החדשות הבאות שקשורות למצלמה ולתמונות:

תמיכה במצלמה מונוכרומטית

היכולת להשתמש במצלמה בשחור-לבן הוצגה לראשונה ב-Android 9 (API ברמה 28). ב-Android 10 נוספו כמה שיפורים לתמיכה במצלמה בשחור-לבן:

  • תמיכה בפורמט סטרימינג Y8 לשיפור היעילות של הזיכרון.
  • תמיכה בצילום DNG גולמי בשחור-לבן.
  • הוספנו ספירות של מסנני צבעים (CFA) מסוג MONO ו-NIR כדי להבחין בין מצלמה מונוכרומטית רגילה לבין מצלמות אינפרה-אדום קרוב.

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

פורמט עומק דינמי

החל מ-Android 10, מצלמות יכולות לשמור את נתוני העומק של תמונה בקובץ נפרד, באמצעות סכימה חדשה שנקראת Dynamic Depth Format (DDF). אפליקציות יכולות לבקש גם את תמונת ה-JPG וגם את נתוני המטא של העומק שלה, ולהשתמש במידע הזה כדי להחיל טשטוש כלשהו בעיבוד שלאחר הצילום, בלי לשנות את נתוני התמונה המקוריים.

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

פורמט קובץ תמונה של יעילות גבוהה

פורמט High Efficiency Image File‏ (HEIF) הוא פורמט סטנדרטי של תמונות וסרטונים שמציג קידוד באיכות גבוהה יותר וגודל קובץ קטן יותר בהשוואה לפורמטים אחרים של קבצים.

מידע נוסף על פורמט הקובץ זמין במאמר בנושא HEIC.

שיפורים בשימוש בכמה מצלמות

ב-Android 10 יש שיפור באיחוד של כמה מצלמות למצלמה לוגית אחת, תכונה שהוצגה ב-Android 9 (API ברמה 28). התווספו האפשרויות הבאות ל-Camera2 API:

  • isSessionConfigurationSupported(SessionConfiguration sessionConfig) – מאפשרת לשאול אם אפשר להשתמש בהגדרות של הסשן שהועבר כדי ליצור סשן של צילום במצלמה.

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

Accessibility services API

ב-Android 10 נוספו התכונות וממשקי ה-API החדשים הבאים של שירותי הנגישות:

דגל מפתח הכניסה של AccessibilityNodeInfo

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

קורא מסך קולי בתיבת דו-שיח בנושא נגישות

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

קיצור הדרך לנגישות כשהניווט באמצעות תנועות מופעל

כשמפעילים את התכונה ניווט באמצעות תנועות ב-Android 10, לחצן הנגישות לא מוצג ולא ניתן לבחור בו. כדי לגשת לתפריט שירותי הנגישות, המשתמשים צריכים לבצע אחת מהמחוות הבאות:

  • החלקה למעלה עם שתי אצבעות.
  • מחליקים למעלה עם שתי אצבעות וממשיכים להחזיק.

קיצור דרך לנגישות במקלדות פיזיות

ב-Android 10, המשתמשים יכולים להפעיל את קיצור הדרך לנגישות במקלדת פיזית על ידי לחיצה על Control+Alt+Z.

שיפור בבקר של המקלדת הווירטואלית

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

הגדרת פסק זמן לנגישות על ידי המשתמש

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

שיפורים במילוי האוטומטי

ב-Android 10 יש את השיפורים הבאים בשירות המילוי האוטומטי.

בקשות למילוי אוטומטי שקשורות לתאימות

אפשר להשתמש בדגל FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST כדי לקבוע אם בקשה למילוי אוטומטי נוצרה באמצעות מצב תאימות.

שמירת שם משתמש וסיסמה בו-זמנית

אפשר לתמוך במקרים שבהם אפליקציה משתמשת בכמה פעילויות כדי להציג שם משתמש, סיסמה ושדות אחרים באמצעות הדגל SaveInfo.FLAG_DELAY_SAVE.

אינטראקציה של משתמשים עם ממשק המשתמש של השמירה

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

תמיכה בעדכון של מערכי נתונים

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

שיפורים בסיווג השדות

‫Android 10 כולל את השיפורים הבאים ב-Field Classification API.

ה-constructor של UserData.Builder

הקונסטרוקטור UserData.Builder השתנה כדי להתאים יותר לדפוס Builder.

אפשר למפות ערך לכמה סוגים של מזהי קטגוריות

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

תמיכה משופרת במספרי כרטיסי אשראי

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

תמיכה בסיווג שדות ספציפי לאפליקציה

ב-Android 10 נוספה האפשרות FillResponse.setUserData(), שמאפשרת להגדיר נתוני משתמש ספציפיים לאפליקציה למשך הסשן. כך שירות המילוי האוטומטי יכול לזהות סוגים של שדות עם תוכן ספציפי לאפליקציה.

רכיבי ממשק משתמש ואמצעי בקרה במערכת

ב-Android 10 בוצעו השיפורים הבאים בממשק המשתמש:

תמיכה במכסות של JVMTI PopFrame

ב-Android 10 נוספה תמיכה ביכולת can_pop_frames בהטמעה של Android JVMTI. במהלך ניפוי הבאגים, התכונה הזו מאפשרת להריץ מחדש פונקציות אחרי השהיה בנקודת עצירה ושינוי של משתנים מקומיים, משתנים גלובליים או יישום של פונקציה. מידע נוסף זמין בדף העזרה של Oracle בנושא Pop Frame.

Surface control API

ב-Android 10 יש API‏ SurfaceControl לגישה ברמה נמוכה ל-compositor של המערכת (SurfaceFlinger). לרוב המשתמשים, SurfaceView היא הדרך הנכונה להשתמש ב-compositor. ה-API‏ SurfaceControl יכול להיות שימושי במקרים מסוימים, למשל:

  • סנכרון של מספר פלטפורמות
  • הטמעה של משטחים בתהליכים שונים
  • ניהול מחזור חיים ברמה נמוכה יותר

SurfaceControl API זמין גם ב-SDK וגם ב-NDK bindings. ההטמעה של NDK כוללת API להחלפה ידנית של מאגרי נתונים עם מנהל ההרכבה. האפשרות הזו מספקת פתרון חלופי למשתמשים שנתקלו במגבלות של BufferQueue.

זיהוי של רכיב rendering שנתקע ב-WebView

ב-Android 10 הוצג המחלקה המופשטת WebViewRenderProcessClient, שאפליקציות יכולות להשתמש בה כדי לזהות אם WebView הפסיק להגיב. כדי להשתמש בכיתה הזו:

  1. מגדירים מחלקת משנה משלכם ומטמיעים את השיטות onRenderProcessResponsive() ו-onRenderProcessUnresponsive() שלה.
  2. מצרפים מופע של WebViewRenderProcessClient לאובייקט WebView אחד או יותר.
  3. אם WebView לא מגיב, המערכת קוראת לשיטת onRenderProcessUnresponsive() של הלקוח, ומעבירה את WebView ואת WebViewRenderProcess. (אם WebView הוא תהליך יחיד, הפרמטר WebViewRenderProcess הוא null). האפליקציה יכולה לבצע פעולה מתאימה, כמו הצגת תיבת דו-שיח למשתמש עם שאלה אם הוא רוצה להפסיק את תהליך העיבוד.

אם WebView לא מגיב, המערכת מתקשרת אל onRenderProcessUnresponsive() מעת לעת (לא יותר מפעם אחת כל חמש שניות), אבל לא מבצעת פעולה אחרת. אם WebView יגיב שוב, המערכת תתקשר אל onRenderProcessResponsive() רק פעם אחת.

חלוניות ההגדרות

ב-Android 10 הוצג Settings Panels, ‏ API שמאפשר לאפליקציות להציג הגדרות למשתמשים בהקשר של האפליקציה. כך המשתמשים לא צריכים להיכנס אל ההגדרות כדי לשנות דברים כמו NFC או נתונים ניידים כדי להשתמש באפליקציה.

איור 1. המשתמש מנסה לפתוח דף אינטרנט כשהמכשיר לא מחובר לרשת. מופיעה חלונית ההגדרות Internet Connectivity (קישוריות לאינטרנט) ב-Chrome…

איור 2. המשתמש יכול להפעיל את ה-Wi-Fi ולבחור רשת בלי לצאת מאפליקציית Chrome.

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

כדי להציג חלונית הגדרות, מפעילים intent עם אחת מהפעולות הבאות: Settings.Panel

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

הערך settings_panel_type יכול להיות אחד מהערכים הבאים:

ACTION_INTERNET_CONNECTIVITY
הגדרות שקשורות לחיבור לאינטרנט, כמו מצב טיסה, Wi-Fi וחבילת גלישה.
ACTION_WIFI
ההגדרות של ה-Wi-Fi מוצגות, אבל לא ההגדרות האחרות של הקישוריות. ההגדרה הזו שימושית לאפליקציות שצריכות חיבור Wi-Fi כדי לבצע העלאות או הורדות גדולות.
ACTION_NFC
מוצגות כל ההגדרות שקשורות לתקשורת מטווח קצר (NFC).
ACTION_VOLUME
הצגת הגדרות עוצמת הקול לכל זרמי האודיו.

שיפורים בשיתוף

ב-Android 10 יש כמה שיפורים בשיתוף:

Sharing Shortcuts API

Sharing Shortcuts API מחליף את Direct Share APIs.

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

המנגנון הישן יותר של שיתוף ישיר עדיין פועל, אבל לאפליקציות שמשתמשות בו יש עדיפות נמוכה יותר מאשר לאפליקציות שמשתמשות ב-Sharing Shortcuts API.

ShortcutInfo.Builder הוספנו שיטות ושיפרנו שיטות קיימות כדי לספק מידע נוסף על יעד השיתוף.

יעדים לשיתוף ישיר

אפשר לפרסם קיצור דרך דינמי כיעד לשיתוף ישיר. איך מפרסמים יעדים לשיתוף ישיר

ShortcutManagerCompat הוא AndroidX API חדש שמספק תאימות לאחור עם DirectShare API הישן. זו הדרך המועדפת לפרסום מטרות שיתוף.

תצוגה מקדימה של טקסט

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

איך מוסיפים תצוגות מקדימות של טקסט עשיר

מידע נוסף

מידע נוסף על שיתוף נתונים בין אפליקציות זמין במאמרים שליחת נתונים פשוטים לאפליקציות אחרות וקבלת נתונים פשוטים מאפליקציות אחרות

עיצוב כהה

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

סוגים של שירותים שפועלים בחזית

ב-Android 10 הוצג מאפיין המניפסט של XML‏ foregroundServiceType, שכוללים בהגדרה של כמה שירותים ספציפיים. אפשר להקצות כמה סוגים של שירותים שפועלים בחזית לשירות מסוים, אבל זה לא מומלץ.

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

סוג השירות שפועל בחזית תרחיש שימוש לדוגמה בשירות שצריך להצהיר על הסוג הזה
connectedDevice מעקב אחרי נתוני כושר באמצעות גאדג'ט לביש
dataSync הורדת קבצים מרשת
location המשך פעולה שהמשתמש יזם
mediaPlayback הפעלת ספר אודיו, פודקאסט או מוזיקה
mediaProjection הקלטת סרטון של תצוגת המכשיר למשך זמן קצר
phoneCall איך מטפלים בשיחה פעילה

Kotlin

‫Android 10 כולל את העדכונים הבאים לפיתוח ב-Kotlin.

הערות לגבי אפשרות להחזרת ערך null בממשקי API של libcore

‫Android 10 משפר את הכיסוי של הערות לגבי אפשרות קבלת ערך null ב-SDK עבור ממשקי libcore API. ההערות האלה מאפשרות למפתחי אפליקציות שמשתמשים בניתוח של ערכי null ב-Kotlin או ב-Java ב-Android Studio לקבל מידע על ערכי null כשהם מקיימים אינטראקציה עם ממשקי ה-API האלה.

בדרך כלל, הפרות של חוזה ה-nullability ב-Kotlin גורמות לשגיאות קומפילציה. כדי להבטיח תאימות לקוד הקיים, נוספו רק ההערות @RecentlyNullable ו-@RecentlyNonNull. כלומר, הפרות של כללי ה-nullability מובילות לאזהרות במקום לשגיאות.

בנוסף, כל ההערות @RecentlyNullable או @RecentlyNonNull שנוספו ב-Android 9 משתנות ל-@Nullable ול-@NonNull, בהתאמה. המשמעות היא שב-Android 10 ואילך, הפרות של nullability מובילות לשגיאות במקום לאזהרות.

מידע נוסף על שינויים בהערות זמין במאמר Android Pie SDK is now more Kotlin-friendly בבלוג למפתחי Android.

NDK

‫Android 10 כולל את השינויים הבאים ב-NDK.

שיפור בניפוי הבאגים של הבעלות על מתאר הקובץ

ב-Android 10 נוספה fdsan, שעוזרת למצוא ולתקן בעיות בבעלות על מתאר קובץ בקלות רבה יותר.

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

למידע נוסף על קריסות שקשורות לבעיות האלה, אפשר לעיין במאמר בנושא שגיאה שזוהתה על ידי fdsan. מידע נוסף על fdsan זמין בדף Googlesource בנושא fdsan.

ELF TLS

אפליקציות שנוצרו באמצעות NDK עם רמת API מינימלית של 29 יכולות להשתמש ב-ELF TLS במקום ב-emutls. נוספה תמיכה במקשרים דינמיים וסטטיים כדי לתמוך בשיטה הזו לטיפול במשתנים מקומיים של השרשור.

באפליקציות שנוצרו לרמת API 28 ומטה, הוטמעו שיפורים ב-libgcc/compiler-rt כדי לעקוף בעיות מסוימות ב-emutls.

מידע נוסף זמין במאמר שינויים ב-Android למפתחי NDK.

זמן ריצה

‫Android 10 כולל את השינוי הבא בזמן הריצה.

הפעלת פינוי אשפה על סמך mallinfo

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

ב-Android 10, אוסף הזבל (GC) עוקב אחרי הגודל הכולל של הערימה שהוקצתה על ידי המערכת malloc(), כדי לוודא שהקצאות גדולות של malloc() תמיד נכללות בחישובים שמפעילים את אוסף הזבל. אפליקציות שמשלבות הקצאות גדולות של C++ עם ביצוע Java עשויות לראות עלייה בתדירות של איסוף האשפה כתוצאה מכך. יכול להיות שבאפליקציות אחרות תהיה ירידה קלה.

בדיקה וניפוי באגים

‫Android 10 כולל את השיפורים הבאים לבדיקה ולניפוי באגים.

שיפורים במעקב אחר המערכת במכשיר

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

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

ב-Android 10 ואילך, קובצי המעקב נשמרים בפורמט שאפשר לפתוח באמצעות Perfetto, פרויקט קוד פתוח למדידת ביצועים ולמעקב. אפשר להמיר קובצי מעקב של Perfetto לפורמט Systrace.

שיפורים ב-TextClassifier

ב-Android 10 יש פונקציונליות נוספת לסיווג טקסט בממשק TextClassifier.

זיהוי שפה

השיטה detectLanguage() פועלת באופן דומה לשיטות סיווג קיימות. היא מקבלת אובייקט TextLanguage.Request ומחזירה אובייקט TextLanguage.

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

הצעות לפעולות בשיחה

השיטה suggestConversationActions() דומה לשיטות סיווג קיימות. היא מקבלת אובייקט ConversationActions.Request ומחזירה אובייקט ConversationActions.

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

תשובות/פעולות חכמות בהתראות

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

ממשק ה-API שמשמש ליצירת התשובות האלה הוא חלק מ-TextClassifier, והוא נחשף ישירות למפתחים ב-Android 10. מידע נוסף זמין בקטע על השיפורים ב-TextClassifier.

אם האפליקציה מספקת הצעות משלה, הפלטפורמה לא יוצרת הצעות אוטומטיות. אם לא רוצים שההתראות של האפליקציה יציגו הצעות לתשובות או לפעולות, אפשר להשבית את התשובות והפעולות שנוצרות על ידי המערכת באמצעות setAllowGeneratedReplies() ו-setAllowSystemGeneratedContextualActions().