ב-Android 10 יש תכונות ופיצ'רים נהדרים למשתמשים ולמפתחים. במסמך הזה נסביר מה זמין למפתחים.
למידע נוסף על ממשקי ה-API, אפשר לקרוא את דוח ההבדלים של ממשקי ה-API או להיכנס אל Android API reference – מחפשים ממשקי 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
החל מגרסה 10 של Android, ספק האבטחה 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 לקישוריות מקצה לקצה.
API להצעות לרשתות Wi-Fi
ב-Android 10 נוספה תמיכה באפשרות של האפליקציה לבקש מהמשתמש להתחבר לנקודת גישה ל-Wi-Fi. אתם יכולים לספק הצעות לרשת שאליה רוצים להתחבר. בסופו של דבר, הפלטפורמה תבחר איזו נקודת גישה לאשר על סמך הקלט שלכם ושל אפליקציות אחרות.
מידע נוסף על התכונה הזו זמין במאמר הצעות לרשתות Wi-Fi.
שיפורים במצבי הביצועים הגבוהים ובזמן האחזור הנמוך של Wi-Fi
ב-Android 10 אפשר לספק רמז למודם הבסיסי כדי למזער את זמן האחזור.
ב-Android 10 יש הרחבה של Wi-Fi lock API כדי לתמוך ביעילות במצב ביצועים גבוהים ובמצב זמן אחזור קצר. חיסכון בצריכת החשמל של Wi-Fi מושבת במצבי הביצועים הגבוהים ובמצב זמן האחזור הקצר, ויכול להיות שתתבצע אופטימיזציה נוספת של זמן האחזור במצב זמן האחזור הקצר, בהתאם לתמיכה של המודם.
מצב זמן אחזור קצר מופעל רק כשהאפליקציה שמקבלת את הנעילה פועלת בחזית והמסך מופעל. מצב זמן האחזור הקצר מועיל במיוחד לאפליקציות משחקים לנייד בזמן אמת.
חיפושים מיוחדים בפותר ה-DNS
ב-Android 10 נוספה תמיכה מקורית בחיפושים מיוחדים של DNS באמצעות חיפושים בטקסט ללא הצפנה ומצב DNS-over-TLS. בעבר, פותר ה-DNS של הפלטפורמה תמך רק ברשומות A ו-AAAA, שמאפשרות לחפש רק את כתובות ה-IP שמשויכות לשם, אבל לא תמך בסוגי רשומות אחרים.
ה-API DnsResolver
מספק פתרון אסינכרוני גנרי, שמאפשר לחפש רשומות מסוג 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.
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, אפליקציה יכולה לתעד את הפעלת האודיו מאפליקציות אחרות. מידע מלא זמין במאמר תיעוד של הפעלה.
סרגל שליטה בהתראות בסגנון 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 נוספו שיטות ל-MediaCodecInfo
שמספקות מידע נוסף על קודק.
מידע נוסף זמין במאמר קודקים של מדיה.
Thermal API
כשמכשירים מתחממים מדי, הם עשויים להגביל את המעבד (CPU) ו/או את המעבד הגרפי (GPU), וזה עלול להשפיע על אפליקציות ומשחקים בדרכים לא צפויות. באפליקציות שמשתמשות בגרפיקה מורכבת, במחשוב כבד או בפעילות רציפה ברשת, יש סיכוי גבוה יותר לבעיות. הבעיות האלה עשויות להשתנות בין מכשירים בהתאם למעבד ולתדרי הליבה, לרמות השילוב, לחבילת התוכנה ולגורמים נוספים כמו גורמי העיצוב של המכשיר.
ב-Android 10, אפליקציות ומשחקים יכולים להשתמש ב-API תרמי כדי לעקוב אחרי שינויים במכשיר ולנקוט פעולה כדי לשמור על צריכת אנרגיה נמוכה יותר ולשחזר את הטמפרטורה הרגילה. אפליקציות רושמות מאזין ב-PowerManager, דרכו המערכת מדווחת על סטטוס תרמי שנע בין קל וממוצע לחמור, קריטי, חירום וכיבוי.
כשהמכשיר מדווח על לחץ תרמי, אפליקציות ומשחקים יכולים לעזור על ידי הפחתת הפעילות המתמשכת כדי לצמצם את צריכת החשמל בדרכים שונות. לדוגמה, אפליקציות סטרימינג יכולות להפחית את הרזולוציה או את קצב הביטים או את תעבורת הנתונים ברשת, אפליקציית מצלמה יכולה להשבית את הפלאש או את שיפור התמונה האינטנסיבי, משחק יכול להפחית את קצב הפריימים או את יצירת התמונות הפוליגונליות, אפליקציית מדיה יכולה להפחית את עוצמת הקול של הרמקול ואפליקציית מפות יכולה להשבית את ה-GPS.
כדי להשתמש ב-API התרמי נדרש שכבת HAL חדשה במכשיר. בשלב הזה, ה-API נתמך במכשירי Pixel עם Android מגרסה 10 ואילך, ואנחנו עובדים עם שותפינו יצרני המכשירים כדי להרחיב את התמיכה בסביבה העסקית בהקדם האפשרי.
מצלמה ותמונות
ב-Android 10 יש את התכונות החדשות הבאות שקשורות למצלמה ולתמונות:
תמיכה במצלמה מונוכרומטי
מערכת Android 9 (API ברמה 28) הייתה הראשונה שהציגה יכולת של מצלמה מונוכרומטית. ב-Android 10 נוספו כמה שיפורים לתמיכה במצלמות מונוכרום:
- תמיכה בפורמט Y8 stream לשיפור יעילות הזיכרון.
- תמיכה בצילומי DNG גולמיים מונוכרום.
- הוספת ספירת CFA ל-MONO ול-NIR כדי להבדיל בין מצלמה רגילה מונוכרומטית לבין מצלמות אינפרה-אדום קרוב.
אפשר להשתמש בתכונה הזו כדי לצלם תמונה מונוכרום מקורית. במכשיר לוגי עם כמה מצלמות, יכול להיות שייעשה שימוש במצלמה מונוכרום כמצלמת משנה פיזית כדי לשפר את איכות התמונה בתאורה חלשה.
פורמט עומק דינמי
החל מ-Android 10, מצלמות יכולות לשמור את נתוני העומק של תמונה בקובץ נפרד, באמצעות סכימה חדשה שנקראת Dynamic Depth Format (DDF). אפליקציות יכולות לבקש גם את קובץ ה-JPG וגם את המטא-נתונים של העומק שלו, ולהשתמש במידע הזה כדי להחיל טשטוש לפי הצורך בתהליך העיבוד הפוסט-פרודקשן, בלי לשנות את נתוני התמונה המקורית.
המפרט של הפורמט הזה מופיע במאמר פורמט עומק דינמי.
פורמט קובץ של תמונה ביעילות גבוהה
פורמט קובץ תמונה יעיל (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
החל מגרסה 10 של Android, אפשר להפעיל את הפונקציה isTextEntryKey()
כדי לקבוע אם AccessibilityNodeInfo
נתון מייצג מקש להזנת טקסט שנמצא במקלדת או בלוח המקשים.
משוב קולי בתיבת דו-שיח בנושא נגישות
במקרים שבהם המשתמשים צריכים להשתמש במקש הקיצור לנגישות כדי להפעיל שירות נגישות, ב-Android 10 אפשר להוסיף להנחיה של תיבת הדו-שיח הנחיה להמרת טקסט לדיבור, אם השירות מבקש זאת.
קיצור דרך לנגישות כשהניווט באמצעות תנועות מופעל
כשהתכונה ניווט באמצעות תנועות מופעלת ב-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.
ה-constructor של UserData.Builder
המבנה של ה-constructor של UserData.Builder
השתנה כדי להתאים יותר לדפוס Builder
.
מאפשרים למפות ערך למספר סוגים של מזהי קטגוריות
כשמשתמשים ב-UserData.Builder
ב-Android 10, אפשר עכשיו למפות ערך למספר סוגים של מזהי קטגוריות. בגרסאות קודמות, הופעלה חריגה אם ערך נוסף יותר מפעם אחת.
תמיכה משופרת במספרי כרטיסי אשראי
סיווג השדות יכול עכשיו לזהות מספרים בני ארבע ספרות כארבע הספרות האחרונות של מספר כרטיס אשראי.
תמיכה בסיווג שדות ספציפיים לאפליקציה
ב-Android 10 נוספה התכונה FillResponse.setUserData()
, שמאפשרת להגדיר נתוני משתמש ספציפיים לאפליקציה למשך הסשן.
כך שירות המילוי האוטומטי יוכל לזהות את סוגי השדות עם תוכן ספציפי לאפליקציה.
רכיבים אינטראקטיביים ואמצעי בקרה במערכת
ב-Android 10 יש את השיפורים הבאים בממשק המשתמש:
תמיכה במכסות של JVMTI PopFrame
ב-Android 10 נוספה תמיכה ביכולת can_pop_frames
בהטמעת JVMTI ב-Android. כשמבצעים ניפוי באגים, התכונה הזו מאפשרת להריץ מחדש פונקציות אחרי שמשהים אותן בנקודת עצירה ולשנות את המשתנים המקומיים, הגלובליים או ההטמעה של הפונקציה. למידע נוסף, ראו דף העזרה של Pop Frame של Oracle.
Surface Control API
ב-Android 10 יש API SurfaceControl
לגישה ברמה נמוכה למעבד הגרפיקה של המערכת (SurfaceFlinger
). לרוב המשתמשים, SurfaceView היא הדרך הנכונה לנצל את מעבד הגרפיקה. ה-API של SurfaceControl
יכול להיות שימושי במקרים מסוימים, למשל:
- סנכרון של כמה משטחים
- הטמעה של משטח במספר תהליכים
- ניהול חיי המשתמש ברמה נמוכה יותר
ממשק ה-API של SurfaceControl
זמין גם בSDK וגם בקישור ל-NDK.
ההטמעה של NDK כוללת ממשק API להחלפה ידנית של מאגרים עם המרכזן. כך תוכלו לספק חלופה למשתמשים שחצו את המגבלות של BufferQueue
.
זיהוי של עיבוד נתונים תקוע ב-WebView
ב-Android 10 נוספה הכיתה המופשטת WebViewRenderProcessClient
, שבאמצעותה אפליקציות יכולות לזהות אם WebView
הפסיק להגיב. כדי להשתמש בכיתה הזו:
- מגדירים תת-מחלקה משלכם ומטמיעים את השיטות
onRenderProcessResponsive()
ו-onRenderProcessUnresponsive()
. - מחברים מכונה של
WebViewRenderProcessClient
לאובייקטWebView
אחד או יותר. - אם ה-
WebView
לא מגיב, המערכת קוראת לשיטהonRenderProcessUnresponsive()
של הלקוח, ומעבירה את הערכיםWebView
ו-WebViewRenderProcess
. (אםWebView
הוא תהליך יחיד, הפרמטרWebViewRenderProcess
הוא null). האפליקציה יכולה לבצע פעולה מתאימה, למשל להציג למשתמש תיבת דו-שיח שבה הוא יתבקש להפסיק את תהליך העיבוד.
אם ה-WebView
לא מגיב, המערכת מתקשרת אל onRenderProcessUnresponsive()
מדי פעם (לא יותר מפעם ב-5 שניות), אבל לא מבצעת פעולה אחרת.
אם ה-WebView
יגיב שוב, המערכת תפנה אל onRenderProcessResponsive()
רק פעם אחת.
חלוניות ההגדרות
ב-Android 10 מופיע חלונית ההגדרות, ממשק API שמאפשר לאפליקציות להציג למשתמשים הגדרות בהקשר של האפליקציה. כך המשתמשים לא צריכים להיכנס להגדרות כדי לשנות דברים כמו NFC או נתונים ניידים כדי להשתמש באפליקציה.
לדוגמה, נניח שמשתמש פותח דפדפן אינטרנט בזמן שהמכשיר שלו במצב טיסה. לפני Android 10, האפליקציה הציגה רק הודעה כללית שבה המשתמש מתבקש לפתוח את ההגדרות כדי לשחזר את החיבור. ב-Android 10, באפליקציית הדפדפן יכול להופיע חלונית בתוך הדף עם הגדרות קישוריות חשובות, כמו מצב טיסה, Wi-Fi (כולל רשתות בקרבת מקום) ונתונים לנייד. בעזרת הלוח הזה, המשתמשים יכולים לשחזר את החיבור בלי לצאת מהאפליקציה.
כדי להציג חלונית הגדרות, מפעילים כוונה עם אחת מהפעולות הבאות של 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 API.
במקום לאחזר תוצאות באופן תגובתי על פי דרישה, API של קיצורי הדרך לשיתוף מאפשר לאפליקציות לפרסם יעדים לשיתוף ישיר מראש. כך פועלת ShortcutManager
.
שני ממשקי ה-API דומים, ולכן הרחבנו את ShortcutInfo
API כדי להקל על השימוש בשתי התכונות. באמצעות Sharing Shortcuts API, אפשר להקצות ישירות קטגוריות או אנשים ליעד שיתוף. יעדי השיתוף נשארים במערכת עד שאותה אפליקציה מעדכנת אותם או עד שהאפליקציה תוסר.
המנגנון הקודם של שיתוף ישיר עדיין פועל, אבל לאפליקציות שמשתמשות בו יש תעדוף נמוך יותר מאשר לאפליקציות שמשתמשות ב-Sharing Shortcuts API.
ShortcutInfo.Builder
הוסיפה ושיפור של שיטות לספק מידע נוסף על יעד השיתוף.
יעדי שיתוף ישיר
אפשר לפרסם קיצור דרך דינמי כיעד לשיתוף ישיר. פרסום יעדים של שיתוף ישיר
ShortcutManagerCompat
הוא ממשק API חדש של AndroidX שמספק תאימות לאחור ל-DirectShare API הישן. זו הדרך המועדפת לפרסם מטרות שיתוף.
תצוגה מקדימה של הטקסט
כשאפליקציה משתפת תוכן טקסט, היא יכולה להציג תצוגה מקדימה אופציונלית של התוכן בממשק המשתמש של 'כרטיסיית השיתוף'.
הוספת תצוגות מקדימות של טקסט עשיר
מידע נוסף
למידע נוסף על האופן שבו אפליקציות יכולות לשתף נתונים, תוכלו לעיין במאמרים שליחת נתונים פשוטים לאפליקציות אחרות וקבלת נתונים פשוטים מאפליקציות אחרות.
עיצוב כהה
ב-Android 10 יש עיצוב כהה שחלה גם על ממשק המשתמש של מערכת Android וגם על האפליקציות שפועלות במכשיר. למידע מלא, ראו עיצוב כהה.
סוגים של שירותים שפועלים בחזית
ב-Android 10 מופיע המאפיין foregroundServiceType
של מניפסט XML, שצריך לכלול בהגדרה של כמה שירותים ספציפיים. אפשר להקצות כמה סוגי שירותים שפועלים בחזית לשירות מסוים, אבל זה מתאים רק במקרים נדירים.
בטבלה הבאה מוצגים סוגי השירותים השונים בחזית, והשירותים שבהם כדאי להצהיר על סוג ספציפי:
סוג השירות שפועל בחזית | תרחיש לדוגמה לשירות שצריך להצהיר על הסוג הזה |
---|---|
connectedDevice
| מעקב אחר צמיד כושר לביש |
dataSync
| הורדת קבצים מרשת |
location
| המשך פעולה שהמשתמש יזם |
mediaPlayback
| הפעלת ספר אודיו, פודקאסט או מוזיקה |
mediaProjection
| להקליט סרטון של המסך של המכשיר בפרק זמן קצר |
phoneCall
| טיפול בשיחה פעילה בטלפון |
Kotlin
Android 10 כולל את העדכונים הבאים לפיתוח ב-Kotlin.
הערות על יכולת האפסיות לממשקי API של libcore
ב-Android 10 יש שיפור בהיקף ההערות לגבי יכולת האפסיות ב-SDK של ממשקי ה-API של libcore. התוספות האלה מאפשרות למפתחי אפליקציות שמשתמשים בניתוח של ערכים null ב-Kotlin או ב-Java ב-Android Studio לקבל מידע על ערכים null במהלך האינטראקציה עם ממשקי ה-API האלה.
בדרך כלל, הפרות של חוזה ה-nullability ב-Kotlin גורמות לשגיאות בהדרכה. כדי להבטיח תאימות לקוד הקיים, רק ההערות @RecentlyNullable
ו-@RecentlyNonNull
מתווספות. כלומר, הפרות של תנאי האפשרות לקבלת ערך גורמות להצגת אזהרות במקום שגיאות.
בנוסף, כל הערות @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
כשאובייקטים קטנים של Java בפלטפורמה מפנים לאובייקטים ענקיים ב-heap של C++, לרוב אפשר למחזר את אובייקטי ה-C++ רק כשאוספים את אובייקט ה-Java, למשל, כשמסיימים את הטיפול בו. בגרסאות קודמות, הפלטפורמה העריכה את הגדלים של אובייקטים רבים ב-C++ שמשויכים לאובייקטים ב-Java. ההערכה הזו לא תמיד הייתה מדויקת, ולפעמים היא הובילה לעלייה משמעותית בשימוש בזיכרון, כי הפלטפורמה לא הצליחה לבצע איסוף גראז' כשהיה צריך.
ב-Android 10, מנקה האשפה (GC) עוקב אחרי הגודל הכולל של אשכול הזיכרון שהוקצה על ידי המערכת malloc()
, כדי לוודא שהקצאות גדולות של malloc()
תמיד נכללות בחישובים שמפעילים את GC. כתוצאה מכך, יכול להיות שבאפליקציות שמשתמשות בשילוב של מספר גדול של הקצאות ב-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 הוספנו את האפשרות להציג הצעות לתשובות בתוך התראה. בגרסה 10 של Android, התכונה הזו מתרחבת עם היכולת לכלול הצעות לפעולות שמבוססות על כוונה. בנוסף, הפלטפורמה יכולה ליצור את ההצעות האלה באופן אוטומטי. אפליקציות עדיין יכולות לספק הצעות משלה, או לבטל את ההסכמה להצגת הצעות שנוצרו על ידי המערכת.ממשק ה-API שמשמש ליצירת התשובות האלה הוא חלק מ-TextClassifier
, וגם נחשף ישירות למפתחים ב-Android 10.
מידע נוסף זמין בקטע על השיפורים ב-TextClassifier.
אם האפליקציה מספקת הצעות משלה, הפלטפורמה לא יוצרת הצעות אוטומטיות. אם אתם לא רוצים שתוצגו באפליקציה הצעות לתשובות או לפעולות, תוכלו לבטל את ההסכמה להצגת תשובות ופעולות שנוצרו על ידי המערכת באמצעות setAllowGeneratedReplies()
ו-setAllowSystemGeneratedContextualActions()
.