ב-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 כוללת כמה שיפורים שקשורים לרשתות ולקישוריות.
API לחיבור לרשת Wi-Fi
ב-Android 10 נוספה תמיכה בחיבורים ישירים מקצה לקצה. התכונה הזו מאפשרת לאפליקציה לבקש מהמשתמש לשנות את נקודת הגישה שהמכשיר מחובר אליה באמצעות WifiNetworkSpecifier כדי לתאר את המאפיינים של הרשת המבוקשת. החיבור בין מכשירים מקבילים משמש למטרות שלא קשורות לרשת, כמו הגדרת אתחול למכשירים משניים כמו Chromecast וחומרה של Google Home.
מידע נוסף מופיע במאמר בנושא Wi-Fi Network Request API לקישוריות בין רשתות שכנות.
הצעת רשת Wi-Fi באמצעות API
ב-Android 10 נוספה תמיכה באפליקציה כדי לבקש מהמשתמש להתחבר לנקודת גישה ל-Wi-Fi. אתם יכולים להציע לאיזו רשת להתחבר. בסופו של דבר, הפלטפורמה תבחר איזו נקודת גישה לקבל על סמך הקלט מהאפליקציה שלכם ומאפליקציות אחרות.
מידע נוסף על התכונה הזו מופיע במאמר בנושא הצעות ל-Wi-Fi.
שיפורים במצבי Wi-Fi עם ביצועים גבוהים וזמן אחזור קצר
ב-Android 10 אפשר לספק רמז למודם הבסיסי כדי לצמצם את זמן האחזור.
ב-Android 10, ה-API של נעילת ה-Wi-Fi הורחב כדי לתמוך ביעילות במצב ביצועים גבוהים ובמצב זמן אחזור קצר. מצב החיסכון בחשמל של ה-Wi-Fi מושבת במצב ביצועים גבוהים ובמצב זמן אחזור קצר, ויכול להיות שתופעל אופטימיזציה נוספת של זמן האחזור במצב זמן אחזור קצר, בהתאם לתמיכה של המודם.
מצב זמן אחזור קצר מופעל רק כשהאפליקציה שרוכשת את הנעילה פועלת בחזית והמסך פועל. מצב זמן טעינה קצר שימושי במיוחד לאפליקציות של משחקים לנייד בזמן אמת.
חיפושים מיוחדים במפענח ה-DNS
ב-Android 10 נוספה תמיכה מובנית בחיפושי DNS מיוחדים, גם באמצעות חיפושים בטקסט לא מוצפן וגם באמצעות מצב DNS-over-TLS. בעבר, מפענח ה-DNS של הפלטפורמה תמך רק ברשומות A ו-רשומת AAAA, שמאפשרות לחפש רק את כתובות ה-IP שמשויכות לשם, אבל לא תמך בסוגי רשומות אחרים.
DnsResolver API מספק פתרון גנרי אסינכרוני, שמאפשר לחפש SRV, NAPTR וסוגי רשומות אחרים. שימו לב שהאפליקציה צריכה לנתח את התגובה.
לאפליקציות שמבוססות על NDK, ראו android_res_nsend.
Wi-Fi Easy Connect
ב-Android 10 אפשר להשתמש ב-Easy Connect כדי להקצות פרטי כניסה ל-Wi-Fi למכשיר עמית, כתחליף ל-WPS שהוצא משימוש.
אפליקציות יכולות לשלב את Easy Connect בתהליך ההגדרה וההקצאה שלהן באמצעות ה-intent ACTION_PROCESS_WIFI_EASY_CONNECT_URI.
מידע נוסף על התכונה הזו זמין במאמר Wi-Fi Easy Connect.
API לחיבור Wi-Fi ישיר
ב-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 כדי לספק פונקציונליות של סינון שיחות וזיהוי שיחות.
API של שירות הפניית שיחות
ב-Android 10, הטיפול ב-intent של שיחות השתנה. השידור NEW_OUTGOING_CALL הוצא משימוש והוחלף ב-API CallRedirectionService. ה-API של CallRedirectionService מספק ממשקים שמאפשרים לשנות שיחות יוצאות שבוצעו על ידי פלטפורמת Android. לדוגמה, אפליקציות של צד שלישי יכולות לבטל שיחות ולנתב אותן מחדש דרך VoIP.
שיפורים ביצירת קבצים באחסון חיצוני
בנוסף להוספת נפח אחסון ייעודי לאפליקציות, ב-Android 10 נוספו היכולות הבאות שקשורות לאחסון חיצוני:
- אתם יכולים להשתמש בדגל
IS_PENDINGכדי לתת לאפליקציה גישה בלעדית לקובץ מדיה בזמן שהוא נכתב בדיסק. - אם אתם יודעים על מיקום ספציפי שבו צריך לאחסן קבצים, אתם יכולים לספק למערכת רמז לגבי המיקום שבו צריך לאחסן את הקבצים החדשים שנכתבו.
- לכל התקן אחסון חיצוני יש שם אמצעי אחסון ייחודי.
מדיה וגרפיקה
ב-Android 10 נוספו ממשקי ה-API והתכונות החדשות הבאות בתחום המדיה והגרפיקה:
שיתוף קלט אודיו
ב-Android 10 נוספה היכולת של שתי אפליקציות לשתף את קלט האודיו בו-זמנית. למידע מלא, אפשר לעיין במאמר שיתוף קלט אודיו.
הקלטת הפעלת אודיו
ב-Android 10, אפליקציה יכולה להקליט הפעלת אודיו מאפליקציות אחרות. מידע מלא זמין במאמר הקלטת שידור חוזר.
סרגל חיפוש בהתראות MediaStyle
החל מ-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 שחושפות מידע נוסף על קודק.
מידע נוסף זמין במאמר רכיבי codec של מדיה.
Thermal API
כשהמכשירים מתחממים מדי, הם עלולים להגביל את המעבד (CPU) או את המעבד הגרפי (GPU), וזה יכול להשפיע על אפליקציות ומשחקים בדרכים לא צפויות. באפליקציות שמשתמשות בגרפיקה מורכבת, בחישובים כבדים או בפעילות רשת מתמשכת, יש סיכוי גבוה יותר להיתקל בבעיות. הבעיות האלה יכולות להשתנות בין מכשירים בהתאם לערכת השבבים ולתדרי הליבה, לרמות השילוב וגם לאריזה ולגורם הצורה של המכשיר.
ב-Android 10, אפליקציות ומשחקים יכולים להשתמש ב-API תרמי כדי לעקוב אחרי שינויים במכשיר ולבצע פעולות לשמירה על צריכת חשמל נמוכה יותר, כדי להחזיר את הטמפרטורה לרמה הרגילה. אפליקציות רושמות מאזין ב-PowerManager, שדרכו המערכת מדווחת על מצב תרמי מתמשך, החל מקל ובינוני ועד חמור, קריטי, חירום וכיבוי.
כשהמכשיר מדווח על עומס תרמי, אפליקציות ומשחקים יכולים לעזור על ידי הפחתת פעילויות מתמשכות כדי לצמצם את צריכת החשמל בדרכים שונות. לדוגמה, אפליקציות סטרימינג יכולות להפחית את הרזולוציה, את קצב העברת הנתונים או את התנועה ברשת, אפליקציית מצלמה יכולה להשבית את הפלאש או את שיפור התמונה האינטנסיבי, משחק יכול להפחית את קצב הפריימים או את ריצוף המצולעים, אפליקציית מדיה יכולה להפחית את עוצמת הקול של הרמקול ואפליקציית מפות יכולה להשבית את ה-GPS.
כדי להשתמש ב-API לטמפרטורה, נדרשת שכבת HAL חדשה במכשיר. כרגע יש תמיכה ב-API במכשירי Pixel עם Android 10, ואנחנו עובדים עם השותפים שלנו שמייצרים מכשירים כדי להרחיב את התמיכה בסביבה העסקית כמה שיותר מהר.
מצלמה ותמונות
ב-Android 10 נוספו התכונות החדשות הבאות שקשורות למצלמה ולתמונות:
תמיכה במצלמה מונוכרומטית
היכולת להשתמש במצלמה מונוכרומטית נוספה לראשונה ב-Android 9 (רמת API 28). ב-Android 10 נוספו כמה שיפורים לתמיכה במצלמה מונוכרומטית:
- תמיכה בפורמט סטרימינג Y8 לשיפור יעילות הזיכרון.
- תמיכה בצילום DNG גולמי מונוכרומטי.
- הוספת ערכי MONO ו-NIR CFA כדי להבחין בין מצלמה רגילה בשחור-לבן לבין מצלמות אינפרה-אדום קרוב.
אתם יכולים להשתמש בתכונה הזו כדי לצלם תמונה מונוכרומטית מקורית. במכשיר לוגי עם כמה מצלמות, יכול להיות שתהיה מצלמה מונוכרומטית שתשמש כמצלמת משנה פיזית כדי לשפר את איכות התמונה בתנאי תאורה חלשה.
פורמט עומק דינמי
החל מ-Android 10, מצלמות יכולות לאחסן את נתוני העומק של תמונה בקובץ נפרד, באמצעות סכימה חדשה שנקראת Dynamic Depth Format (DDF). אפליקציות יכולות לבקש גם את תמונת ה-JPG וגם את המטא-נתונים של עומק התמונה, ולהשתמש במידע הזה כדי להחיל כל טשטוש שהן רוצות בעיבוד שלאחר הצילום, בלי לשנות את נתוני התמונה המקוריים.
כדי לקרוא את המפרט של הפורמט הזה, עיינו במאמר פורמט עומק דינמי.
פורמט קובץ תמונה ביעילות גבוהה (HEIF)
פורמט קובץ תמונה ביעילות גבוהה (HEIF) הוא פורמט סטנדרטי לתמונות ולסרטונים, שמציע קידוד באיכות גבוהה יותר וקובץ קטן יותר בהשוואה לפורמטים אחרים של קבצים.
מידע נוסף על פורמט הקובץ זמין במאמר בנושא HEIC.
שיפורים במצב ריבוי מצלמות
ב-Android 10 שופר המיזוג של כמה מצלמות למצלמה לוגית אחת, תכונה שהוצגה ב-Android 9 (רמת API 28). האפשרויות הבאות נוספו ל-Camera2 API:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)– מאפשרת לשלוח שאילתה כדי לבדוק אם אפשר להשתמש בהגדרת הסשן שהועברה כדי ליצור סשן צילום במצלמה.
LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID– מאפשר לכם לקבוע את המזהה של המצלמה הפיזית הפעילה שמגבה מכשיר מצלמה לוגי. אתם יכולים להשתמש במזהים שמוחזרים כדי לבקש סטרימינג לוגי וסטרימינג ממצלמות משנה פיזיות, וכך לשפר את יעילות צריכת החשמל.
ממשק API של שירותי נגישות
ב-Android 10 נוספו התכונות וממשקי ה-API החדשים הבאים לשירות הנגישות:
סימון מפתח הכניסה של AccessibilityNodeInfo
החל מ-Android 10, אפשר להפעיל את
isTextEntryKey()
כדי לקבוע אם AccessibilityNodeInfo נתון מייצג מקש להזנת טקסט
שהוא חלק ממקלדת או מלוח מקשים.
קורא מסך קולי בתיבת הדו-שיח בנושא נגישות
במקרים שבהם המשתמשים צריכים להשתמש בקיצור הדרך לנגישות כדי להפעיל שירות נגישות, ב-Android 10 אפשר להוסיף לתיבת הדו-שיח הנחיה להמרת טקסט לדיבור (TTS) אם השירות מבקש זאת.
קיצור דרך לנגישות כשניווט באמצעות תנועות מופעל
כשמפעילים את התכונה ניווט באמצעות תנועות ב-Android 10, כפתור הנגישות לא מוצג ואי אפשר לבחור בו. כדי לגשת לתפריט שירותי הנגישות, המשתמשים צריכים לבצע אחת מהתנועות הבאות:
- מחליקים למעלה עם שתי אצבעות.
- מחליקים למעלה עם שתי אצבעות ולוחצים לחיצה ארוכה.
קיצור דרך לנגישות במקלדות פיזיות
ב-Android 10, המשתמשים יכולים להפעיל את קיצור הדרך לנגישות במקלדת פיזית על ידי לחיצה על Control+Alt+Z.
שיפור בבקר של המקלדת הווירטואלית
ב-Android 10, שירותי נגישות יכולים לבקש שהמקלדת הווירטואלית תוצג גם כשהמכשיר מזהה שמחוברת אליו מקלדת פיזית. המשתמשים יכולים לשנות את ההתנהגות הזו.
זמני קצובים מוגדרים על ידי המשתמש לנגישות
ב-Android 10 נוסף ה-API getRecommendedTimeoutMillis(). השיטה הזו מספקת תמיכה בזמנים קצובים לתפוגה שמוגדרים על ידי המשתמשים לרכיבים אינטראקטיביים ולא אינטראקטיביים בממשק המשתמש. הערך המוחזר מושפע גם מהעדפות המשתמש וגם מממשקי API של שירותי נגישות.
שיפורים במילוי האוטומטי
ב-Android 10 יש את השיפורים הבאים בשירות המילוי האוטומטי.
בקשות למילוי אוטומטי שקשורות לתאימות
אפשר להשתמש בדגל FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST כדי לקבוע אם בקשת המילוי האוטומטי נוצרה באמצעות מצב תאימות.
שמירת שם המשתמש והסיסמה בו-זמנית
כדי לתמוך במקרים שבהם אפליקציה משתמשת בכמה פעילויות כדי להציג את שם המשתמש, הסיסמה ושדות אחרים, אפשר להשתמש בדגל SaveInfo.FLAG_DELAY_SAVE.
אינטראקציה של המשתמש עם ממשק המשתמש של השמירה
כדי להציג ולהסתיר שדה סיסמה בתיבת דו-שיח לשמירה, אפשר להגדיר מאזין לפעולות בתיבת הדו-שיח ולשנות את החשיפה של התצוגה מרחוק של הסיסמה המתאימה.
תמיכה בעדכון של מערכי נתונים
המילוי האוטומטי יכול לעדכן סיסמאות קיימות. לדוגמה, אם משתמש כבר שמר סיסמה, והוא שומר סיסמה חדשה, המילוי האוטומטי מבקש מהמשתמש לעדכן את הסיסמה הקיימת במקום לשמור סיסמה חדשה.
שיפורים בסיווג השדות
Android 10 כוללת את השיפורים הבאים ב-Field Classification API.
UserData.Builder constructor
ה-constructor של UserData.Builder השתנה כדי להתאים יותר לתבנית של Builder.
אפשר למפות ערך לכמה סוגים של מזהי קטגוריות
כשמשתמשים ב-UserData.Builder ב-Android 10, אפשר למפות ערך לכמה סוגים של מזהי קטגוריות. בגרסאות קודמות, אם ערך נוסף יותר מפעם אחת, נזרקה חריגה.
תמיכה משופרת במספרי כרטיסי אשראי
עכשיו אפשר לזהות מספרים בני ארבע ספרות כארבע הספרות האחרונות של מספר כרטיס אשראי באמצעות סיווג שדות.
תמיכה בסיווג שדות ספציפיים לאפליקציה
ב-Android 10 נוספה האפשרות
FillResponse.setUserData(),
שמאפשרת להגדיר נתוני משתמשים ספציפיים לאפליקציה למשך הסשן.
כך שירות המילוי האוטומטי יכול לזהות סוגים של שדות עם תוכן ספציפי לאפליקציה.
ממשק המשתמש ואמצעי הבקרה של המערכת
ב-Android 10 יש את השיפורים הבאים בממשק המשתמש:
תמיכה ביכולות PopFrame של JVMTI
ב-Android 10 נוספה תמיכה ביכולת can_pop_frames בהטמעה של Android JVMTI. כשמנפים באגים, התכונה הזו מאפשרת להריץ מחדש פונקציות אחרי השהיה בנקודת עצירה והתאמה של משתנים מקומיים, משתנים גלובליים או הטמעה של פונקציה. מידע נוסף זמין בדף העזר של Oracle בנושא Pop Frame.
Surface control API
ב-Android 10 יש ממשק API של SurfaceControl לגישה ברמה נמוכה למערכת ה-compositor (SurfaceFlinger). לרוב המשתמשים, SurfaceView היא הדרך הנכונה להשתמש ב-compositor. SurfaceControl API יכול להיות שימושי במקרים מסוימים, למשל:
- סנכרון של כמה פלטפורמות
- הטמעת משטח בתהליך חוצה-תהליכים
- ניהול משך החיים ברמה נמוכה יותר
SurfaceControl API זמין גם ב-SDK וגם ב-NDK.
ההטמעה של NDK כוללת API להחלפה ידנית של מאגרים עם ה-compositor. האפשרות הזו מספקת חלופה למשתמשים שנתקלו במגבלות של BufferQueue.
זיהוי של עיבוד שנתקע ב-WebView
ב-Android 10 נוספה המחלקה המופשטת WebViewRenderProcessClient, שאפליקציות יכולות להשתמש בה כדי לזהות אם WebView הפסיק להגיב. כדי להשתמש במחלקה הזו:
- מגדירים מחלקת משנה משלכם ומטמיעים את השיטות
onRenderProcessResponsive()ו-onRenderProcessUnresponsive()שלה. - מצרפים מופע של
WebViewRenderProcessClientלאובייקט אחד או יותר שלWebView. - אם ה-
WebViewלא מגיב, המערכת קוראת לשיטהonRenderProcessUnresponsive()של הלקוח ומעבירה את ה-WebViewואת ה-WebViewRenderProcess. (אםWebViewהוא תהליך יחיד, הפרמטרWebViewRenderProcessהוא null). האפליקציה יכולה לבצע פעולה מתאימה, כמו להציג למשתמש תיבת דו-שיח שבה הוא נשאל אם הוא רוצה לעצור את תהליך העיבוד.
אם ה-WebView עדיין לא מגיב, המערכת קוראת ל-onRenderProcessUnresponsive() מדי פעם (לא יותר מפעם אחת בכל חמש שניות), אבל לא מבצעת שום פעולה אחרת.
אם ה-WebView מגיב שוב, המערכת קוראת ל-onRenderProcessResponsive() רק פעם אחת.
חלוניות ההגדרות
ב-Android 10 יש חלוניות הגדרות, ממשק API שמאפשר לאפליקציות להציג למשתמשים הגדרות בהקשר של האפליקציה. כך המשתמשים לא צריכים להיכנס להגדרות כדי לשנות דברים כמו NFC או חבילת גלישה כדי להשתמש באפליקציה.
לדוגמה, נניח שמשתמש פותח דפדפן אינטרנט כשהמכשיר שלו במצב טיסה. לפני 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 מחליף את ממשקי ה-API של Direct Share.
במקום לאחזר תוצאות כתגובה לפי דרישה, ה-Sharing Shortcuts API מאפשר לאפליקציות לפרסם מראש יעדים של שיתוף ישיר. ככה פועלת ShortcutManager.
שני ממשקי ה-API דומים, ולכן הרחבנו את ShortcutInfo API כדי שיהיה קל יותר להשתמש בשתי התכונות. באמצעות Sharing Shortcuts API, אתם יכולים להקצות קטגוריות או אנשים ישירות ליעד שיתוף. יעדי השיתוף נשארים במערכת עד שהאפליקציה מעדכנת אותם או עד שמסירים את האפליקציה.
המנגנון הישן של השיתוף הישיר עדיין פועל, אבל לאפליקציות שמשתמשות בו יש עדיפות נמוכה יותר מאשר לאפליקציות שמשתמשות ב-Sharing Shortcuts API.
ShortcutInfo.Builder מוסיף ומשפר methods כדי לספק מידע נוסף על יעד השיתוף.
יעדים לשיתוף ישיר
אתם יכולים לפרסם קיצור דרך דינמי כיעד לשיתוף ישיר. איך מפרסמים יעדים לשיתוף ישיר
ShortcutManagerCompat
הוא AndroidX API חדש שמספק תאימות לדור קודם של DirectShare API הישן. זו הדרך המועדפת לפרסום של יעדי שיתוף.
תצוגה מקדימה של הטקסט
כשאפליקציה משתפת תוכן טקסט, היא יכולה להציג תצוגה מקדימה אופציונלית של התוכן בממשק המשתמש של הקובץ לשיתוף.
הוספת תצוגות מקדימות של טקסט עשיר
מידע נוסף
למידע נוסף על האופן שבו אפליקציות יכולות לשתף נתונים, קראו את המאמרים שליחת נתונים פשוטים לאפליקציות אחרות וקבלת נתונים פשוטים מאפליקציות אחרות.
עיצוב כהה
ב-Android 10 יש עיצוב כהה שחל גם על ממשק המשתמש של מערכת Android וגם על האפליקציות שפועלות במכשיר. למידע נוסף, ראו עיצוב כהה.
סוגים של שירותים שפועלים בחזית
ב-Android 10 נוסף מאפיין המניפסט foregroundServiceType ב-XML, שצריך לכלול בהגדרה של כמה שירותים ספציפיים. אפשר להקצות כמה סוגים של שירותים שפועלים בחזית לשירות מסוים, אבל זה לא מתאים ברוב המקרים.
בטבלה הבאה מוצגים הסוגים השונים של שירותים שפועלים בחזית והשירותים שבהם מתאים להצהיר על סוג ספציפי:
| סוג השירות שפועל בחזית | תרחיש לדוגמה של שירות שצריך להצהיר על הסוג הזה |
|---|---|
connectedDevice
| מעקב אחרי צמיד כושר לביש |
dataSync
| הורדת קבצים מרשת |
location
| המשך של פעולה שהמשתמש התחיל |
mediaPlayback
| השמעת ספר אודיו, פודקאסט או מוזיקה |
mediaProjection
| לצלם סרטון של מסך המכשיר במשך פרק זמן קצר |
phoneCall
| טיפול בשיחת טלפון פעילה |
Kotlin
Android 10 כוללת את העדכונים הבאים לפיתוח ב-Kotlin.
אנוטציות לגבי מאפיין המציין אם ערך יכול להיות ריק (nullability) בממשקי API של libcore
ב-Android 10 יש שיפור בכיסוי של הערות nullability ב-SDK לממשקי API של libcore. האנוטציות האלה מאפשרות למפתחי אפליקציות שמשתמשים בניתוח מאפיין המציין אם ערך יכול להיות ריק (nullability) של Kotlin או Java ב-Android Studio לקבל מידע על ערכי null כשהם משתמשים בממשקי ה-API האלה.
בדרך כלל, הפרות של חוזה nullability ב-Kotlin גורמות לשגיאות קומפילציה. כדי להבטיח תאימות עם הקוד הקיים, נוספות רק ההערות @RecentlyNullable ו-@RecentlyNonNull. כלומר, הפרות של ערכי null גורמות לאזהרות במקום לשגיאות.
בנוסף, כל ההערות מסוג @RecentlyNullable או @RecentlyNonNull שנוספו ב-Android 9 משתנות ל-@Nullable ול-@NonNull, בהתאמה.
כלומר, ב-Android מגרסה 10 ואילך, הפרות של nullability מובילות לשגיאות במקום לאזהרות.
מידע נוסף על שינויים בהערות זמין במאמר Android Pie SDK is now more Kotlin-friendly ב-Android Developers Blog.
NDK
Android 10 כוללת את השינויים הבאים ב-NDK.
ניפוי באגים משופר של בעלות על תיאור קובץ
ב-Android 10 נוסף fdsan, שעוזר למצוא ולתקן בקלות רבה יותר בעיות בבעלות על תיאור קובץ.
באגים שקשורים לטיפול שגוי בבעלות על תיאור קובץ, שנוטים להתבטא בתור use-after-close ו-double-close, דומים לבאגים של הקצאת זיכרון use-after-free ו-double-free, אבל בדרך כלל הרבה יותר קשה לאבחן ולתקן אותם. fdsan מנסה לזהות או למנוע ניהול שגוי של תיאור קובץ על ידי אכיפת הבעלות על תיאור הקובץ.
למידע נוסף על קריסות שקשורות לבעיות האלה, ראו שגיאה שזוהתה על ידי fdsan. מידע נוסף על fdsan זמין בדף של Googlesource בנושא fdsan.
ELF TLS
אפליקציות שנוצרו באמצעות NDK עם רמת API מינימלית של 29 יכולות להשתמש ב-ELF TLS במקום ב-emutls. הוספנו תמיכה במקשרים דינמיים וסטטיים כדי לתמוך בשיטה הזו לטיפול במשתנים מקומיים של שרשורים.
באפליקציות שמבוססות על רמת API 28 ומטה, הוטמעו שיפורים ב-libgcc/compiler-rt כדי לעקוף חלק מהבעיות ב-emutls.
מידע נוסף זמין במאמר שינויים ב-Android למפתחי NDK.
זמן ריצה
Android 10 כוללת את השינוי הבא בסביבת זמן הריצה.
הפעלת איסוף זבל (garbage collection) על סמך mallinfo
כשאובייקטים קטנים של פלטפורמת Java מפנים לאובייקטים גדולים בערימת C++, לעיתים קרובות אפשר להחזיר את האובייקטים של C++ רק כשהאובייקט של Java נאסף, למשל, כשהוא מסתיים. בגרסאות קודמות, הפלטפורמה העריכה את הגדלים של אובייקטים רבים של C++ שמשויכים לאובייקטים של Java. ההערכה הזו לא תמיד הייתה מדויקת, ולפעמים גרמה לעלייה משמעותית בשימוש בזיכרון, כי הפלטפורמה לא הצליחה לאסוף אשפה כשהייתה צריכה.
ב-Android 10, מנגנון איסוף הזבל (GC) עוקב אחרי הגודל הכולל של הקצאת זיכרון בערימה (heap allocation) שהוקצתה על ידי malloc() של המערכת, כדי לוודא שהקצאות גדולות של malloc() תמיד נכללות בחישובים שמפעילים את ה-GC. באפליקציות שמשלבות מספר גדול של הקצאות C++ עם הפעלת Java, יכול להיות שתהיה עלייה בתדירות של איסוף הזבל כתוצאה מכך. באפליקציות אחרות יכולה להיות ירידה קלה.
בדיקה וניפוי באגים
Android 10 כוללת את השיפורים הבאים לבדיקה ולניפוי באגים.
שיפורים בתיעוד עקבות המערכת במכשיר
החל מ-Android 10, אפשר לציין מגבלות לגודל ולמשך של העקבות כשמבצעים עקבות מערכת במכשיר. כשמציינים אחד מהערכים האלה, המערכת מבצעת מעקב ארוך, ומעתיקה מדי פעם את מאגר המעקב לקובץ היעד בזמן שהמעקב מתועד. המעקב מסתיים כשמגיעים למגבלות הגודל או משך הזמן שציינתם.
הפרמטרים הנוספים האלה מאפשרים לבדוק תרחישים שונים מאלה שאפשר לבדוק באמצעות מעקב רגיל. לדוגמה, יכול להיות שאתם מאבחנים באג בביצועים שמתרחש רק אחרי שהאפליקציה פועלת במשך זמן רב. במקרה כזה, אפשר לתעד מעקב ארוך במשך יום שלם, ואז לנתח את מתזמן המעבד, את הפעילות בדיסק, את השרשורים של האפליקציה ונתונים אחרים בדוח כדי לקבוע מה גרם לבאג.
ב-Android מגרסה 10 ואילך, קובצי המעקב נשמרים בפורמט שאפשר לפתוח באמצעות Perfetto – פרויקט בקוד פתוח למעקב ולמדידת ביצועים. אתם יכולים להמיר קובצי מעקב של Perfetto לפורמט Systrace.
שיפורים ב-TextClassifier
ב-Android 10 יש פונקציונליות נוספת של סיווג טקסט בממשק TextClassifier.
זיהוי שפה
ה-method detectLanguage() פועלת באופן דומה ל-methods הקיימות לסיווג. היא מקבלת אובייקט TextLanguage.Request ומחזירה אובייקט TextLanguage.
אובייקטים מסוג TextLanguage מורכבים מרשימה של זוגות מסודרים. כל זוג מכיל לוקאל וציון מובהקות תואם לסיווג.
הצעות לפעולות בשיחה
השיטה
suggestConversationActions()
פועלת באופן דומה לשיטות הסיווג הקיימות. היא מקבלת אובייקט ConversationActions.Request ומחזירה אובייקט ConversationActions.
אובייקטים מסוג ConversationActions מורכבים מרשימה של אובייקטים מסוג ConversationAction. כל אובייקט ConversationAction כולל פעולה מוצעת אפשרית ואת ציון המהימנות שלה.
תשובות מהירות ופעולות מהירות בהתראות
ב-Android 9 נוספה האפשרות להציג הצעות לתשובות בתוך התראה. ב-Android 10, התכונה הזו הורחבה ונוספה לה היכולת לכלול הצעות לפעולות שמבוססות על Intent. בנוסף, הפלטפורמה יכולה ליצור את ההצעות האלה באופן אוטומטי. אפליקציות עדיין יכולות לספק הצעות משלהן, או לבטל את ההסכמה להצעות שנוצרות על ידי המערכת.ה-API שמשמש ליצירת התשובות האלה הוא חלק מ-TextClassifier, והוא גם נחשף ישירות למפתחים ב-Android 10.
מידע נוסף זמין בקטע על שיפורים ב-TextClassifier.
אם האפליקציה מספקת הצעות משלה, הפלטפורמה לא יוצרת הצעות אוטומטיות. אם אתם לא רוצים שההתראות של האפליקציה יציגו הצעות לתשובות או לפעולות, אתם יכולים לבטל את ההסכמה לתשובות ולפעולות שנוצרות על ידי המערכת באמצעות setAllowGeneratedReplies() ו-setAllowSystemGeneratedContextualActions().