[Android各版本特性]Android 10

[Android各版本特性]專欄目錄
01. Android API 版本對照表
02. Android 4.4以前版本特性
03. 爲什麼以Android4.4做分界線
04. Android 4.4 Kitkat
05. Android 5.0 Android Lollipop
06. Android 6.0 Marshmallow
07. Android 7.0 Nougat
08. Android 8.0 Oreo
09. Android 9.0 Pie
10. Android 10
11. 總結(推薦)

1.創新技術和新體驗

1.可摺疊設備

Android 10 基於強大的多窗口支持構建而成,擴展了跨應用窗口的多任務處理能力,還提供了屏幕連續性,可以在設備摺疊或展開時維持應用狀態。Android 10 在 onResume 和 onPause 中添加了多項改進,用於支持多項恢復,並在應用獲得焦點時通知應用。它還更改了 resizeableActivity 清單屬性的工作方式,以幫助您管理應用在可摺疊設備和大屏幕設備上的顯示方式。爲幫助針對可摺疊設備進行編譯,您可以在 Android Studio 中配置可摺疊模擬器來用作虛擬設備 (AVD)。

2.5G 網絡

5G 有望在穩定提升速度的同時降低延遲,Android 10 新增了針對 5G 的平臺支持,並擴展了現有 API 來幫助您充分利用這些增強功能。您可以使用連接 API 來檢測設備是否具有高帶寬連接,還可以檢查連接是否按流量計費。藉助這些功能,您的應用和遊戲可以爲使用 5G 的用戶量身打造豐富的沉浸式體驗。

3.通知中的智能回覆

Android 10 使用設備上的機器學習在通知中提供上下文操作建議,如智能回覆消息或在通知中打開某個地址的地圖。您的應用可以立即充分利用此功能,而您無需執行任何操作。系統提供的智能回覆和操作默認直接插入到通知中。您仍可以根據需要自行提供回覆或操作。使用 setAllowGeneratedReplies() 和 setAllowSystemGeneratedContextualActions() 即可針對每則通知選擇停用智能回覆。

4.深色主題

Android 10 新增了一個系統級的深色主題,非常適合光線較暗的場景並能幫助節省電量。您可以爲應用構建自定義深色主題,也可以選擇使用新的 Force Dark 功能,讓系統根據現有主題動態創建深色版本。

5.手勢導航

Android 10 引入了全手勢導航模式,該模式不顯示通知欄區域,允許應用使用全屏來提供更豐富、更讓人沉浸的體驗。要實現這一點,應用應使用 setSystemUiVisibility() API 以全屏模式佈局,然後相應地處理 WindowInsets,以確保重要的界面區域未被遮擋。

從 Android 10 開始,用戶可以在設備中啓用手勢導航。用戶啓用後,手勢導航會影響設備上的所有應用,無論應用是否以 API 級別 29 爲目標平臺。例如,如果用戶從屏幕邊緣向內滑動,系統會將該手勢解讀爲“返回”導航,除非應用針對屏幕的相應部分明確替換該手勢。

爲了確保您的應用與手勢導航兼容,您需要將應用內容擴展到屏幕邊緣,並適當地處理存在衝突的手勢。

6.設置面板

現在,您可以通過新的設置面板 API 在應用上下文中直接顯示關鍵系統設置。設置面板是浮動界面,您可以通過調用它來顯示用戶可能需要使用的設置,如互聯網連接、NFC 和音量。例如,瀏覽器可以顯示具有飛行模式、WLAN(包括附近網絡)和移動數據等連接設置的面板。要顯示設置面板,只需發出具有某個新 Settings.Panel 操作的 intent。

7.共享快捷方式

共享快捷方式功能可使共享更加輕鬆快捷,讓用戶能夠直接跳轉到其他應用來共享內容。開發者可以發佈能在應用中啓動特定 Activity 的共享目標,同時附上內容;這些共享目標會在共享界面中向用戶顯示。因爲共享目標是提前發佈的,所以共享界面會在啓動後立即加載它們。共享快捷方式類似於應用快捷方式,都使用同一個 ShortcutInfo API。ShareTarget AndroidX 庫也支持此 API。

2.用戶隱私設置

1.賦予用戶對位置數據的更多控制權

用戶可以通過新的權限選項更好地控制他們的位置數據;現在,他們可以允許應用僅在實際使用(在前臺運行)時訪問位置信息。對於大部分應用來說,這提供了足夠的訪問級別;而對於用戶來說,這在確保透明度和控制權方面是一項重大改進。

2.在掃描網絡時保護位置數據

用於掃描網絡的大多數 API 都需要粗略位置權限。Android 10 改爲要求精確位置權限ACCESS_FINE_LOCATION 才能使用 WLAN、WLAN 感知或藍牙 API 中的一些方法,由此來增強對這些 API 的防禦。

3.阻止設備跟蹤

應用無法再訪問不可重置的設備標識符(可用於跟蹤),包括設備 IMEI、序列號和類似標識符。設備的 MAC 地址也會默認在連接到 WLAN 網絡時隨機分配。請閱讀最佳做法,其中的內容有助於您爲具體使用場景選擇合適的標識符;

4.保護外部存儲設備中的用戶數據

Android 10 引入了一些變更,目的是讓用戶更好地控制外部存儲設備中的文件以及其中的應用數據。應用可以將自己的文件存儲在專用沙盒中,但必須使用 MediaStore 來訪問共享媒體文件,並使用系統文件選擇器訪問新的“下載內容”集合中的共享文件。

5.屏蔽意外中斷

Android 10 可阻止應用從後臺啓動,從後臺啓動會使應用意外跳轉到前臺並從其他應用獲得焦點。

6.在後臺運行時訪問設備位置信息需要權限

爲了讓用戶更好地控制應用對位置信息的訪問權限,Android 10 引入了 ACCESS_BACKGROUND_LOCATION 權限。

與 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 權限不同,ACCESS_BACKGROUND_LOCATION 權限僅會影響應用在後臺運行時對位置信息的訪問權限。

7.對 /proc/net 文件系統的訪問權限實施了限制

在搭載 Android 10 或更高版本的設備上,應用無法訪問 /proc/net,其中包含與設備的網絡狀態相關的信息。需要訪問這些信息的應用(如 VPN)應使用 NetworkStatsManager 或 ConnectivityManager 類。

8.對啓用和停用 WLAN 實施了限制

以 Android 10 或更高版本爲目標平臺的應用無法啓用或停用 WLAN。WifiManager.setWifiEnabled() 方法始終返回 false。

如果您需要提示用戶啓用或停用 WLAN,請使用設置面板

9.限制對屏幕內容的訪問

爲了保護用戶的屏幕內容,Android 10 更改了 READ_FRAME_BUFFER、CAPTURE_VIDEO_OUTPUT 和 CAPTURE_SECURE_VIDEO_OUTPUT 權限的作用域,從而禁止以靜默方式訪問設備的屏幕內容。從 Android 10 開始,這些權限只能通過簽名訪問。

需要訪問設備屏幕內容的應用應使用 MediaProjection API,此 API 會顯示提示,要求用戶同意訪問。

10.面向用戶的權限檢查(針對舊版應用)

如果您的應用以 Android 5.1(API 級別 22)或更低版本爲目標平臺,則用戶首次在搭載 Android 10 或更高版本的平臺上使用您的應用時,系統會向其顯示權限屏幕。此屏幕讓用戶有機會撤消系統先前在安裝時嚮應用授予的訪問權限。

3.安全性

1.存儲加密

搭載 Android 10 的所有兼容設備都必須加密用戶數據;爲了提高加密效率,Android 10 引入了我們的新加密模式 Adiantum。

2.默認啓用 TLS 1.3

Android 10 還默認啓用 TLS 1.3,它是 TLS 標準的主要修訂版本,具有性能優勢和更高的安全性。

  • TLS 1.3 加密套件不可自定義。在啓用 TLS 1.3 後,受支持的 TLS 1.3 加密套件會始終保持啓用狀態。任何嘗試通過調用 setEnabledCipherSuites() 停用該加密套件的操作均會被忽略。
  • 在協商 TLS 1.3 時,系統會在將會話添加到會話緩存之前調用 HandshakeCompletedListener 對象。(在 TLS 1.2 和之前的其他版本中,系統會在將會話添加到會話緩存之後調用這些對象。)
  • 在某些情況下,SSLEngine 實例會在之前的 Android 版本中拋出 SSLHandshakeException,而這些實例在 Android 10 及更高版本中會改爲拋出 SSLProtocolException。
  • 不支持 0-RTT 模式。

如有需要,您可以通過調用 SSLContext.getInstance(“TLSv1.2”) 來獲取已停用 TLS 1.3 的 SSLContext。您還可以對相關對象調用 setEnabledProtocols(),從而爲每個連接啓用或停用協議版本。

3.TLS 不信任使用 SHA-1 簽名的證書

在 Android 10 中,使用 SHA-1 哈希算法的證書在 TLS 連接中不受信任。自 2016 年以來,根 CA 未再頒發過此類證書,因爲它們不再受 Chrome 或其他主流瀏覽器的信任。

如果某網站使用的是 SHA-1 證書,則任何嘗試連接該網站的操作都將失敗。

4.連接性

1.改進了點對點連接和互聯網連接

我們重構了 WLAN 堆棧,目的是改進隱私設置和性能,同時改進常見使用場景(如管理 IoT 設備以及提供互聯網連接建議),而無需請求位置權限。網絡連接 API 針對點對點功能(如配置、下載或打印)簡化了通過本地 WLAN 管理 IoT 設備的操作。網絡建議 API 可讓應用向用戶顯示首選 WLAN 網絡以進行互聯網連接。

2.WLAN 性能模式

應用現在可以通過啓用高性能和低延遲模式來請求自適應 WLAN。如果低延遲對用戶體驗(如實時遊戲、活躍語音通話以及類似使用場景)至關重要,這些模式會極具優勢。平臺與設備固件配合使用,可以滿足最低耗電量的要求。要使用新的性能模式,請調用 WifiManager.WifiLock.createWifiLock()(使用 WIFI_MODE_FULL_LOW_LATENCY 或 WIFI_MODE_FULL_HIGH_PERF)。在這些模式中,平臺與設備固件配合使用,可以滿足最低耗電量的要求。

5.Android 基礎知識

1.ART 優化

在 ART 運行時方面的改進可幫助您的應用更快地啓動、佔用更少的內存並更順暢地運行,而您無需執行任何操作。藉助 Google Play 提供的 ART 配置文件,ART 在應用運行之前就可以預先編譯應用組件。在運行時,Android 10 向 ART 的併發複製 (CC) 垃圾回收器添加了分代垃圾回收功能,以節省垃圾回收的時間並提高 CPU 效率,減少卡頓,同時幫助應用在低端設備上更順暢地運行。

2.Thermal API

當設備過熱時,它們可能會限制 CPU 和/或 GPU,而這可能會以意想不到的方式影響應用和遊戲。現在,在 Android 10 中,應用和遊戲可以使用 Thermal API 監控設備變化情況,並在設備過熱時採取措施,使設備恢復到正常溫度。例如,影音在線播放應用可以降低分辨率/比特率或減少網絡流量;相機應用可以停用閃光燈或密集型圖像增強;遊戲可以降低幀速率或減少多邊形曲面細分。

*6.其他要注意的點

1.android.preference 庫已棄用

從 Android 10 開始,將棄用 android.preference 庫。開發者應該改爲使用 AndroidX preference 庫,這是 Android Jetpack 的一部分。

2.Android Beam 已棄用

在 Android 10 中,我們正式棄用了 Android Beam,這是一項舊版功能,可通過近距離無線通信 (NFC) 在多個設備之間啓動數據共享。我們還棄用了一些相關的 NFC API。Android Beam 仍可供需要的設備製造商合作伙伴使用,但它已不再處於積極的開發階段。不過,Android 仍將繼續支持其他的 NFC 功能和 API,並且從標籤和付款中讀取數據等使用場景仍將繼續按預期執行。

3.有關限制非 SDK 接口的更新

爲了幫助確保應用的穩定性和兼容性,Android 平臺開始限制應用在 Android 9(API 級別 28)中使用非 SDK 接口。Android 10 包含更新後的受限制非 SDK 接口列表(基於與 Android 開發者之間的協作以及最新的內部測試)。我們的目標是在限制使用非 SDK 接口之前確保有可用的公開替代方案。詳細信息請看 Android 10 中有關限制非 SDK 接口的更新

4.共享內存

Ashmem 更改了 /proc//maps 中的 dalvik 映射的格式,這會影響那些直接解析映射文件的應用。如果應用依賴於 dalvik 映射格式,則應用開發者應該在搭載 Android 10 或更高版本的設備上測試 /proc//maps 格式並相應地進行解析。

以 Android 10 爲目標平臺的應用無法直接使用 ashmem (/dev/ashmem),而必須通過 NDK 的 ASharedMemory 類訪問共享內存。此外,應用無法直接對現有 ashmem 文件描述符進行 IOCTL,而必須改爲使用 NDK 的 ASharedMemory 類或 Android Java API 創建共享內存區域。這項變更可以提高使用共享內存時的安全性和穩健性,從而提高 Android 的整體性能和安全性。

5.支持可摺疊設備

Android 10 包含支持可摺疊設備和大屏設備的變更。

當應用在 Android 10 上運行時,onResume() 和 onPause() 方法的工作原理是不同的。當多個應用同時在多窗口模式或多顯示屏模式下顯示時,可見堆棧中所有可設置爲焦點的頂層 Activity 都處於“已恢復”狀態,但實際上焦點僅位於其中一個 Activity 上,即“在最頂層處於已恢復狀態”的 Activity。在 Android 10 之前的版本中運行時,一次只能恢復系統中的一個 Activity,而所有其他可見 Activity 都處於已暫停狀態。

請不要將“焦點位於”的 Activity 與“在最頂層處於已恢復狀態”的 Activity 混淆。系統會根據 Z-Order 來爲 Activity 分配優先級,以便爲用戶最後進行互動的 Activity 提供更高的優先級。Activity 可能在頂層處於已恢復狀態,但焦點卻並不位於其上(例如,如果通知欄展開)。

在 Android 10(API 級別 29)及更高版本中,您可以訂閱 onTopResumedActivityChanged() 回調,以便在 Activity 獲取或失去在最頂層處於已恢復狀態的位置後收到通知。這相當於 Android 10 之前版本中的已恢復狀態;如果您的應用使用的專用或單一資源可能需要與其他應用共享,這可以作爲有用的提示。

resizeableActivity 清單屬性的行爲也發生了變化。如果某個應用在 Android 10(API 級別 29)或更高版本中設置 resizeableActivity=false,則當可用屏幕尺寸發生變化或者該應用從一個屏幕移到另一屏幕時,它可能處於兼容模式下。

應用可使用 Android 10 中引入的 android:minAspectRatio 屬性來指示您的應用支持的屏幕寬高比。

從版本 3.5 開始,Android Studio 的模擬器工具將包含 7.3" 和 8" 的虛擬設備,以便您使用較大屏幕測試代碼。

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章