Android 5.0,6.0,7.0,8.0, 9.0新特性

系統(tǒng)角度解讀Android P新特性
Android5.0 21
1.Android Runtime(ART)
大多數(shù) Android 應(yīng)用無(wú)需任何更改就可以在 ART 下工作。不過(guò),部分適合 Dalvik 的技術(shù)并不適用于 ART。如需了解有關(guān)最重要問(wèn)題的信息,請(qǐng)參閱在 Android Runtime (ART) 上驗(yàn)證應(yīng)用行為。如存在以下情況,應(yīng)特別注意:

您的應(yīng)用使用 Java 原生接口 (JNI) 運(yùn)行 C/C++ 代碼。

您使用生成非標(biāo)準(zhǔn)代碼的開(kāi)發(fā)工具(例如,一些代碼混淆工具)。

您使用與壓縮垃圾回收不兼容的技術(shù)

  1. 聲音和振動(dòng)
    如果您當(dāng)前使用 Ringtone、MediaPlayer 或 Vibrator 類(lèi)向通知中添加聲音和振動(dòng),則移除此代碼,以便系統(tǒng)可以在“優(yōu)先”模式中正確顯示通知。取而代之的是,使用 Notification.Builder 方法添加聲音和振動(dòng)。

將設(shè)備設(shè)為 RINGER_MODE_SILENT 可使設(shè)備進(jìn)入新的優(yōu)先模式。如果您將設(shè)備設(shè)為 RINGER_MODE_NORMAL 或 RINGER_MODE_VIBRATE,則設(shè)備將退出優(yōu)先模式。

以前,Android 使用 STREAM_MUSIC 作為主流式傳輸來(lái)控制平板電腦設(shè)備上的音量。在 Android 5.0 中,手機(jī)和平板電腦設(shè)備的主音量流式傳輸現(xiàn)已合并,由 STREAM_RING 或 STREAM_NOTIFICATION 進(jìn)行控制。

  1. 鎖定屏幕可見(jiàn)性
    默認(rèn)情況下,在 Android 5.0 中,通知現(xiàn)在顯示在用戶(hù)的鎖定屏幕上。用戶(hù)可以選擇保護(hù)敏感信息不被公開(kāi),在此情況下,系統(tǒng)會(huì)自動(dòng)刪減通知顯示的文本。要自定義此刪減的通知,請(qǐng)使用 setPublicVersion()。

如果通知不包含個(gè)人信息,或者您想允許媒體播放控件顯示在通知上,則調(diào)用 setVisibility() 方法并將通知的可見(jiàn)性級(jí)別設(shè)為 VISIBILITY_PUBLIC。

  1. 浮動(dòng)通知
    現(xiàn)在,當(dāng)設(shè)備處于活動(dòng)狀態(tài)時(shí)(即,設(shè)備未鎖定且其屏幕已打開(kāi)),通知可以顯示在小型浮動(dòng)窗口中(也稱(chēng)為“浮動(dòng)通知”)。這些通知看上去類(lèi)似于精簡(jiǎn)版的通知,只是浮動(dòng)通知還顯示操作按鈕。用戶(hù)可以在不離開(kāi)當(dāng)前應(yīng)用的情況下處理或清除浮動(dòng)通知。

可能觸發(fā)浮動(dòng)通知的條件示例包括:

用戶(hù)的 Activity 處于全屏模式中(應(yīng)用使用 fullScreenIntent)

通知具有較高的優(yōu)先級(jí)并使用鈴聲或振動(dòng)

如果您的應(yīng)用在以上任何情形下實(shí)現(xiàn)通知,請(qǐng)確保系統(tǒng)正確顯示浮動(dòng)通知。

  1. getRecentTasks()
    為提升用戶(hù)隱私的安全性,現(xiàn)已棄用 ActivityManager.getRecentTasks() 方法。對(duì)于向后兼容性,此方法仍會(huì)返回它的一小部分?jǐn)?shù)據(jù),包括調(diào)用應(yīng)用自己的任務(wù)和可能的一些其他非敏感任務(wù)(如首頁(yè))。如果您的應(yīng)用使用此方法檢索它自己的任務(wù),則改用 getAppTasks() 檢索該信息。
  2. 綁定到服務(wù)
    Context.bindService() 方法現(xiàn)在需要顯式 Intent,如果提供隱式 intent,將引發(fā)異常。為確保應(yīng)用的安全性,請(qǐng)使用顯式 intent 啟動(dòng)或綁定 Service,且不要為服務(wù)聲明 intent 過(guò)濾器。
  3. webview
    Android 5.0 更改了應(yīng)用的默認(rèn)行為。

如果您的應(yīng)用是面向 API 級(jí)別 21 或更高級(jí)別:

默認(rèn)情況下,系統(tǒng)會(huì)阻止混合內(nèi)容和第三方 Cookie。要允許混合內(nèi)容和第三方 Cookie,請(qǐng)分別使用 setMixedContentMode() 和 setAcceptThirdPartyCookies() 方法。

系統(tǒng)現(xiàn)在可以智能地選擇要繪制的 HTML 文檔部分。這個(gè)新的默認(rèn)行為有助于減少內(nèi)存占用和提升性能。如果您要一次渲染整個(gè)文檔,可通過(guò)調(diào)用 enableSlowWholeDocumentDraw() 停用此優(yōu)化。

如果您的應(yīng)用是面向低于 21 的 API 級(jí)別:系統(tǒng)允許混合內(nèi)容和第三方 Cookie,并始終一次渲染整個(gè)文檔。

Android 6.0行為變更

  1. 運(yùn)行時(shí)權(quán)限
    對(duì)于以 Android 6.0(API 級(jí)別 23)或更高版本為目標(biāo)平臺(tái)的應(yīng)用,請(qǐng)務(wù)必在運(yùn)行時(shí)檢查和請(qǐng)求權(quán)限。要確定您的應(yīng)用是否已被授予權(quán)限,請(qǐng)調(diào)用新增的 checkSelfPermission() 方法。要請(qǐng)求權(quán)限,請(qǐng)調(diào)用新增的 requestPermissions() 方法。即使您的應(yīng)用并不以 Android 6.0(API 級(jí)別 23)為目標(biāo)平臺(tái),您也應(yīng)該在新權(quán)限模式下測(cè)試您的應(yīng)用。
  2. 取消支持Apache HTTP客戶(hù)端
    Android 6.0 版移除了對(duì) Apache HTTP 客戶(hù)端的支持。如果您的應(yīng)用使用該客戶(hù)端,并以 Android 2.3(API 級(jí)別 9)或更高版本為目標(biāo)平臺(tái),請(qǐng)改用 HttpURLConnection 類(lèi)。此 API 效率更高,因?yàn)樗梢酝ㄟ^(guò)透明壓縮和響應(yīng)緩存減少網(wǎng)絡(luò)使用,并可最大限度降低耗電量。要繼續(xù)使用 Apache HTTP API,您必須先在 build.gradle 文件中聲明以下編譯時(shí)依賴(lài)項(xiàng):

android {

useLibrary 'org.apache.http.legacy'

}

  1. BoringSSL
    Android 正在從使用 OpenSSL 庫(kù)轉(zhuǎn)向使用 BoringSSL 庫(kù)。如果您要在應(yīng)用中使用 Android NDK,請(qǐng)勿鏈接到并非 NDK API 組成部分的加密庫(kù),如 libcrypto.so 和 libssl.so。這些庫(kù)并非公共 API,可能會(huì)在不同版本和設(shè)備上毫無(wú)征兆地發(fā)生變化或出現(xiàn)故障。此外,您還可能讓自己暴露在安全漏洞的風(fēng)險(xiǎn)之下。請(qǐng)改為修改原生代碼,以通過(guò) JNI 調(diào)用 Java 加密 API,或靜態(tài)鏈接到您選擇的加密庫(kù)。
  2. 通知
    此版本移除了Notification.setLatestEventInfo()方法。請(qǐng)改用 Notification.Builder 類(lèi)來(lái)構(gòu)建通知。要重復(fù)更新通知,請(qǐng)重復(fù)使用 Notification.Builder 實(shí)例。調(diào)用 build() 方法可獲取更新后的 Notification 實(shí)例。

adb shell dumpsys notification命令不再打印輸出您的通知文本。請(qǐng)改用adb shell dumpsys notification --noredact命令打印輸出 notification 對(duì)象中的文本。

  1. 音頻管理器變更
    不再支持通過(guò) AudioManager 類(lèi)直接設(shè)置音量或?qū)⑻囟ㄒ纛l流靜音。setStreamSolo() 方法已棄用,您應(yīng)該改為調(diào)用 requestAudioFocus() 方法。類(lèi)似地,setStreamMute() 方法也已棄用,請(qǐng)改為調(diào)用 adjustStreamVolume() 方法并傳入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE。
  2. 相機(jī)服務(wù)變更
    在此版本中,相機(jī)服務(wù)中共享資源的訪問(wèn)模式已從之前的“先到先得”訪問(wèn)模式更改為高優(yōu)先級(jí)進(jìn)程優(yōu)先的訪問(wèn)模式。對(duì)服務(wù)行為的變更包括:

根據(jù)客戶(hù)端應(yīng)用進(jìn)程的“優(yōu)先級(jí)”授予對(duì)相機(jī)子系統(tǒng)資源的訪問(wèn)權(quán),包括打開(kāi)和配置相機(jī)設(shè)備。帶有對(duì)用戶(hù)可見(jiàn) Activity 或前臺(tái)Activity 的應(yīng)用進(jìn)程一般會(huì)被授予較高的優(yōu)先級(jí),從而使相機(jī)資源的獲取和使用更加可靠;

當(dāng)高優(yōu)先級(jí)的應(yīng)用嘗試使用相機(jī)時(shí),系統(tǒng)可能會(huì)“驅(qū)逐”正在使用相機(jī)客戶(hù)端的低優(yōu)先級(jí)應(yīng)用。在已棄用的 Camera API 中,這會(huì)導(dǎo)致系統(tǒng)為被驅(qū)逐的客戶(hù)端調(diào)用 onError()。在 Camera2 API 中,這會(huì)導(dǎo)致系統(tǒng)為被驅(qū)逐的客戶(hù)端調(diào)用onDisconnected();

在配備相應(yīng)相機(jī)硬件的設(shè)備上,不同的應(yīng)用進(jìn)程可同時(shí)獨(dú)立打開(kāi)和使用不同的相機(jī)設(shè)備。但現(xiàn)在,如果在多進(jìn)程用例中同時(shí)訪問(wèn)相機(jī)會(huì)造成任何打開(kāi)的相機(jī)設(shè)備的性能或能力嚴(yán)重下降,相機(jī)服務(wù)會(huì)檢測(cè)到這種情況并禁止同時(shí)訪問(wèn)。即使并沒(méi)有其他應(yīng)用直接嘗試訪問(wèn)同一相機(jī)設(shè)備,此變更也可能導(dǎo)致低優(yōu)先級(jí)客戶(hù)端被“驅(qū)逐”。

更改當(dāng)前用戶(hù)會(huì)導(dǎo)致之前用戶(hù)帳戶(hù)擁有的應(yīng)用內(nèi)活動(dòng)相機(jī)客戶(hù)端被驅(qū)逐。對(duì)相機(jī)的訪問(wèn)僅限于訪問(wèn)當(dāng)前設(shè)備用戶(hù)擁有的用戶(hù)個(gè)人資料。舉例來(lái)說(shuō),這意味著,當(dāng)用戶(hù)切換到其他帳戶(hù)后,“來(lái)賓”帳戶(hù)實(shí)際上無(wú)法讓使用相機(jī)子系統(tǒng)的進(jìn)程保持運(yùn)行狀態(tài)

Android 7.0行為變更 24

  1. 電池和內(nèi)存
    Android 7.0 包括旨在延長(zhǎng)設(shè)備電池壽命和減少 RAM 使用的系統(tǒng)行為變更。這些變更可能會(huì)影響您的應(yīng)用訪問(wèn)系統(tǒng)資源,以及您的應(yīng)用通過(guò)特定隱式 intent 與其他應(yīng)用交互的方式。
  2. Project Svelte:后臺(tái)優(yōu)化
    Android 7.0 移除了三項(xiàng)隱式廣播,以幫助優(yōu)化內(nèi)存使用和電量消耗。此項(xiàng)變更很有必要,因?yàn)殡[式廣播會(huì)在后臺(tái)頻繁啟動(dòng)已注冊(cè)偵聽(tīng)這些廣播的應(yīng)用。刪除這些廣播可以顯著提升設(shè)備性能和用戶(hù)體驗(yàn)。

移動(dòng)設(shè)備會(huì)經(jīng)歷頻繁的連接變更,例如在 WLAN 和移動(dòng)數(shù)據(jù)之間切換時(shí)。目前,可以通過(guò)在應(yīng)用清單中注冊(cè)一個(gè)接收器來(lái)偵聽(tīng)隱式 CONNECTIVITY_ACTION 廣播,讓?xiě)?yīng)用能夠監(jiān)控這些變更。由于很多應(yīng)用會(huì)注冊(cè)接收此廣播,因此單次網(wǎng)絡(luò)切換即會(huì)導(dǎo)致所有應(yīng)用被喚醒并同時(shí)處理此廣播。

同理,在之前版本的 Android 中,應(yīng)用可以注冊(cè)接收來(lái)自其他應(yīng)用(例如相機(jī))的隱式 ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO 廣播。當(dāng)用戶(hù)使用相機(jī)應(yīng)用拍攝照片時(shí),這些應(yīng)用即會(huì)被喚醒以處理廣播。

為緩解這些問(wèn)題,Android 7.0 應(yīng)用了以下優(yōu)化措施:

面向 Android 7.0 開(kāi)發(fā)的應(yīng)用不會(huì)收到 CONNECTIVITY_ACTION 廣播,即使它們已有清單條目來(lái)請(qǐng)求接受這些事件的通知。在前臺(tái)運(yùn)行的應(yīng)用如果使用 BroadcastReceiver 請(qǐng)求接收通知,則仍可以在主線程中偵聽(tīng) CONNECTIVITY_CHANGE。

應(yīng)用無(wú)法發(fā)送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 廣播。此項(xiàng)優(yōu)化會(huì)影響所有應(yīng)用,而不僅僅是面向 Android 7.0 的應(yīng)用。

如果您的應(yīng)用使用任何 intent,您仍需要盡快移除它們的依賴(lài)關(guān)系,以正確適配 Android 7.0 設(shè)備。Android 框架提供多個(gè)解決方案來(lái)緩解對(duì)這些隱式廣播的需求。例如,JobScheduler API 提供了一個(gè)穩(wěn)健可靠的機(jī)制來(lái)安排滿足指定條件(例如連入無(wú)限流量網(wǎng)絡(luò))時(shí)所執(zhí)行的網(wǎng)絡(luò)操作。您甚至可以使用 JobScheduler 來(lái)適應(yīng)內(nèi)容提供程序變化。

  1. 系統(tǒng)權(quán)限更改
    為了提高私有文件的安全性,面向 Android 7.0 或更高版本的應(yīng)用私有目錄被限制訪問(wèn) (0700)。此設(shè)置可防止私有文件的元數(shù)據(jù)泄漏,如它們的大小或存在性。此權(quán)限更改有多重副作用:

1.私有文件的文件權(quán)限不應(yīng)再由所有者放寬,為使用 MODE_WORLD_READABLE 和/或 MODE_WORLD_WRITEABLE 而進(jìn)行的此類(lèi)嘗試將觸發(fā) SecurityException。

注:迄今為止,這種限制尚不能完全執(zhí)行。應(yīng)用仍可能使用原生 API 或 File API 來(lái)修改它們的私有目錄權(quán)限。但是,我們強(qiáng)烈反對(duì)放寬私有目錄的權(quán)限。

2.傳遞軟件包網(wǎng)域外的 file:// URI 可能給接收器留下無(wú)法訪問(wèn)的路徑。因此,嘗試傳遞 file:// URI 會(huì)觸發(fā) FileUriExposedException。分享私有文件內(nèi)容的推薦方法是使用 FileProvider。

3.DownloadManager 不再按文件名分享私人存儲(chǔ)的文件。舊版應(yīng)用在訪問(wèn) COLUMN_LOCAL_FILENAME 時(shí)可能出現(xiàn)無(wú)法訪問(wèn)的路徑。面向 Android 7.0 或更高版本的應(yīng)用在嘗試訪問(wèn) COLUMN_LOCAL_FILENAME 時(shí)會(huì)觸發(fā) SecurityException。通過(guò)使用DownloadManager.Request.setDestinationInExternalFilesDir()或DownloadManager.Request.setDestinationInExternalPublicDir()將下載位置設(shè)置為公共位置的舊版應(yīng)用仍可以訪問(wèn) COLUMN_LOCAL_FILENAME 中的路徑,但是我們強(qiáng)烈反對(duì)使用這種方法。對(duì)于由 DownloadManager 公開(kāi)的文件,首選的訪問(wèn)方式是使用ContentResolver.openFileDescriptor()。

  1. 在應(yīng)用件共享文件

對(duì)于面向 Android 7.0 的應(yīng)用,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開(kāi) file:// URI。如果一項(xiàng)包含文件 URI 的 intent 離開(kāi)您的應(yīng)用,則應(yīng)用出現(xiàn)故障,并出現(xiàn) FileUriExposedException 異常。

要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項(xiàng) content:// URI,并授予 URI 臨時(shí)訪問(wèn)權(quán)限。進(jìn)行此授權(quán)的最簡(jiǎn)單方式是使用 FileProvider 類(lèi)。

  1. 屏幕縮放

Android 7.0 支持用戶(hù)設(shè)置顯示尺寸,以放大或縮小屏幕上的所有元素,從而提升設(shè)備對(duì)視力不佳用戶(hù)的可訪問(wèn)性。用戶(hù)無(wú)法將屏幕縮放至低于最小屏幕寬度 sw320dp,該寬度是 Nexus 4 的寬度,也是常規(guī)中等大小手機(jī)的寬度。

當(dāng)設(shè)備密度發(fā)生更改時(shí),系統(tǒng)會(huì)以如下方式通知正在運(yùn)行的應(yīng)用:

如果是面向 API 級(jí)別 23 或更低版本系統(tǒng)的應(yīng)用,系統(tǒng)會(huì)自動(dòng)終止其所有后臺(tái)進(jìn)程。這意味著如果用戶(hù)切換離開(kāi)此類(lèi)應(yīng)用,轉(zhuǎn)而打開(kāi) Settings 屏幕并更改 Display size 設(shè)置,則系統(tǒng)會(huì)像處理內(nèi)存不足的情況一樣終止該應(yīng)用。如果應(yīng)用具有任何前臺(tái)進(jìn)程,則系統(tǒng)會(huì)如處理運(yùn)行時(shí)更改中所述將配置變更通知給這些進(jìn)程,就像對(duì)待設(shè)備屏幕方向變更一樣。

如果是面向 Android 7.0 的應(yīng)用,則其所有進(jìn)程(前臺(tái)和后臺(tái))都會(huì)收到有關(guān)配置變更的通知,如處理運(yùn)行時(shí)更改中所述。

大多數(shù)應(yīng)用并不需要進(jìn)行任何更改即可支持此功能,不過(guò)前提是這些應(yīng)用遵循 Android 最佳做法。具體要檢查的事項(xiàng):

1.在屏幕寬度為 sw320dp 的設(shè)備上測(cè)試您的應(yīng)用,并確保其充分運(yùn)行。

2.當(dāng)設(shè)備配置發(fā)生變更時(shí),更新任何與密度相關(guān)的緩存信息,例如緩存位圖或從網(wǎng)絡(luò)加載的資源。當(dāng)應(yīng)用從暫停狀態(tài)恢復(fù)運(yùn)行時(shí),檢查配置變更。

注:如果您要緩存與配置相關(guān)的數(shù)據(jù),則最好也包括相關(guān)元數(shù)據(jù),例如該數(shù)據(jù)對(duì)應(yīng)的屏幕尺寸或像素密度。保存這些元數(shù)據(jù)便于您在配置變更后決定是否需要刷新緩存數(shù)據(jù)。

3.避免用像素單位指定尺寸,因?yàn)橄袼夭粫?huì)隨屏幕密度縮放。應(yīng)改為使用與密度無(wú)關(guān)像素 (dp) 單位指定尺寸。

  1. 檢查你的應(yīng)用是否使用私有庫(kù)

為幫助您識(shí)別加載私有庫(kù)的問(wèn)題,logcat 可能會(huì)生成一個(gè)警告或運(yùn)行時(shí)錯(cuò)誤。例如,如果您的應(yīng)用面向 API 級(jí)別 23 或更低級(jí)別,并在運(yùn)行 Android 7.0 的設(shè)備上嘗試訪問(wèn)私有庫(kù),您可能會(huì)看到一個(gè)類(lèi)似于下面所示的警告:

03-21 17:07:51.502 31234 31234 W linker :

library "libandroid_runtime.so"("/system/lib/libandroid_runtime.so") needed or dlopened by "/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible for the namespace "classloader-namespace" - the access is temporarily granted as a workaround for https://b/26394120

這些 logcat 警告通知您哪個(gè)庫(kù)正在嘗試訪問(wèn)私有平臺(tái) API,但不會(huì)導(dǎo)致您的應(yīng)用崩潰。但是,如果應(yīng)用面向 API 級(jí)別 24 或更高級(jí)別,logcat 會(huì)生成以下運(yùn)行時(shí)錯(cuò)誤,您的應(yīng)用可能會(huì)崩潰:

java.lang.UnsatisfiedLinkError: dlopen failed:

library "libcutils.so"("/system/lib/libcutils.so") needed or dlopened by"/system/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace"

at java.lang.Runtime.loadLibrary0(Runtime.java:977)

at java.lang.System.loadLibrary(System.java:1602)

如果您的應(yīng)用使用動(dòng)態(tài)鏈接到私有平臺(tái) API 的第三方庫(kù),您可能也會(huì)看到上述 logcat 輸出。利用 Android 7.0DK 中的 readelf 工具,您可以通過(guò)運(yùn)行以下命令生成給定 .so 文件的所有動(dòng)態(tài)鏈接的共享庫(kù)列表:

aarch64-linux-android-readelf -dW libMyLibrary.so

  1. 其他重要說(shuō)明

⑴如果一個(gè)應(yīng)用在 Android 7.0 上運(yùn)行,但卻是針對(duì)更低 API 級(jí)別開(kāi)發(fā)的,那么在用戶(hù)更改顯示尺寸時(shí),系統(tǒng)將終止此應(yīng)用進(jìn)程。應(yīng)用必須能夠妥善處理此情景。否則,當(dāng)用戶(hù)從最近使用記錄中恢復(fù)運(yùn)行應(yīng)用時(shí),應(yīng)用將會(huì)出現(xiàn)崩潰現(xiàn)象。

您應(yīng)測(cè)試應(yīng)用以確保不會(huì)發(fā)生此行為。要進(jìn)行此測(cè)試,您可以通過(guò) DDMS 手動(dòng)終止應(yīng)用,以造成相同的崩潰現(xiàn)象。

在密度發(fā)生更改時(shí),系統(tǒng)不會(huì)自動(dòng)終止面向 N 及更高版本的應(yīng)用;不過(guò),這些應(yīng)用仍可能對(duì)配置變更做出不良響應(yīng)。

⑵Android 7.0 上的應(yīng)用應(yīng)能夠妥善處理配置變更,并且在后續(xù)啟動(dòng)時(shí)不會(huì)出現(xiàn)崩潰現(xiàn)象。您可以通過(guò)更改字體大小 (Setting >Display > Font size) 并隨后從最近使用記錄中恢復(fù)運(yùn)行應(yīng)用,來(lái)驗(yàn)證應(yīng)用行為。

⑶由于之前的 Android 版本中的一項(xiàng)錯(cuò)誤,系統(tǒng)未能將對(duì)主線程上的一個(gè) TCP 套接字的寫(xiě)入操作舉報(bào)為違反嚴(yán)格模式。Android 7.0 修復(fù)了此錯(cuò)誤。呈現(xiàn)出這種行為的應(yīng)用現(xiàn)在會(huì)引發(fā)android.os.NetworkOnMainThreadException。一般情況下,我們不建議在主線程上執(zhí)行網(wǎng)絡(luò)操作,因?yàn)檫@些操作通常會(huì)出現(xiàn)可能導(dǎo)致 ANR 和卡頓的高尾延遲。

⑷Debug.startMethodTracing()方法系列現(xiàn)在默認(rèn)在您的共享存儲(chǔ)空間上的軟件包特定目錄中存儲(chǔ)輸出,而非 SD 卡根目錄。這意味著應(yīng)用不再需要請(qǐng)求WRITE_EXTERNAL_STORAGE權(quán)限來(lái)使用這些 API 。

⑸許多平臺(tái) API 現(xiàn)在開(kāi)始檢查在 Binder 事務(wù)間發(fā)送的大負(fù)載,系統(tǒng)現(xiàn)在會(huì)將TransactionTooLargeExceptions作為 RuntimeExceptions 再次引發(fā),而不再只是默默記錄或抑制它們。一個(gè)常見(jiàn)例子是在Activity.onSaveInstanceState()上存儲(chǔ)過(guò)多數(shù)據(jù),導(dǎo)致ActivityThread.StopInfo在您的應(yīng)用面向 Android 7.0 時(shí)引發(fā) RuntimeException。

⑹如果應(yīng)用向 View 發(fā)布 Runnable 任務(wù),并且 View 未附加到窗口,系統(tǒng)會(huì)用 View 為 Runnable 任務(wù)排隊(duì);在 View 附加到窗口之前,不會(huì)執(zhí)行 Runnable 任務(wù)。此行為會(huì)修復(fù)以下錯(cuò)誤:

如果一項(xiàng)應(yīng)用是從并非預(yù)期窗口 UI 線程的其他線程發(fā)布到 View,則 Runnable 可能會(huì)因此運(yùn)行錯(cuò)誤的線程。

如果 Runnable 任務(wù)是從并非環(huán)路線程的其他線程發(fā)布,則應(yīng)用可能會(huì)曝光 Runnable 任務(wù)。

⑺如果 Android 7.0 上一項(xiàng)有 DELETE_PACKAGES 權(quán)限的應(yīng)用嘗試刪除一個(gè)軟件包,但另一項(xiàng)應(yīng)用已經(jīng)安裝了這個(gè)軟件包,則系統(tǒng)需要用戶(hù)進(jìn)行確認(rèn)。在這種情況下,應(yīng)用在調(diào)用PackageInstaller.uninstall()時(shí)預(yù)計(jì)的返回狀態(tài)應(yīng)為STATUS_PENDING_USER_ACTION。

⑻名為 Crypto 的 JCA 提供程序已棄用,因?yàn)樗鼉H有的 SHA1PRNG 算法為弱加密。應(yīng)用無(wú)法再使用 SHA1PRNG(不安全地)派生密鑰,因?yàn)椴辉偬峁┐颂峁┏绦颉?/p>

Android 8.0二十大新特性
在Android 8.0“奧利奧”中,應(yīng)用圖標(biāo)的右上角有一個(gè)小點(diǎn),它代表未讀通知。
這是自第一代iPhone發(fā)布以來(lái)iOS中的一項(xiàng)主要功能。第三方Android系統(tǒng)定制廠商長(zhǎng)期以來(lái)也一直在使用這項(xiàng)功能。

另外,用戶(hù)長(zhǎng)按帶有通知標(biāo)記的應(yīng)用圖標(biāo),系統(tǒng)就會(huì)彈出菜單,提供應(yīng)用功能預(yù)覽,就像iOS中的3D Touch功能。

新表情符號(hào)

Android 8.0和iOS 11都推出了新的表情符號(hào),因?yàn)楸砬榉?hào)是人類(lèi)未來(lái)的互動(dòng)方式。谷歌為Android 8.0徹底重新設(shè)計(jì)了表情符號(hào),棄用了Blobs表情包,重新使用傳統(tǒng)圓形表情符號(hào)。
智能復(fù)制和粘貼

從首版Android系統(tǒng)發(fā)布以來(lái),Android就一直支持復(fù)制和粘貼功能,常常在用戶(hù)互動(dòng)功能部署上iOS。這是一項(xiàng)重要功能,但是由于手機(jī)屏幕較小,復(fù)制和粘貼并不方便。Android 8.0讓文本的復(fù)制和粘貼變得更加容易。

這項(xiàng)功能名為“智能文本選擇”。例如,當(dāng)用戶(hù)選擇一個(gè)地址時(shí),地圖鏈接就會(huì)出現(xiàn)在復(fù)制、剪切、粘貼標(biāo)準(zhǔn)功能的旁邊。如果用戶(hù)選擇的一組數(shù)字看起來(lái)很像電話號(hào)碼,那么手機(jī)應(yīng)用就會(huì)出現(xiàn)。

這有些像iOS中的數(shù)據(jù)探測(cè)器,但是谷歌的功能看起來(lái)更為全面,它使用的是谷歌智能識(shí)別人工智能技術(shù)。

畫(huà)中畫(huà)功能

蘋(píng)果通過(guò)iOS 9在iPad中增加了畫(huà)中畫(huà)功能?,F(xiàn)在,Android也具備了這項(xiàng)功能。而且,在Android 8.0中,手機(jī)也能實(shí)現(xiàn)畫(huà)中畫(huà)功能,這正是iPhone所缺少的。
Android 8.0的畫(huà)中畫(huà)模式與預(yù)期的一樣。它能夠允許用戶(hù)把視頻最小化,懸浮在屏幕上方。同時(shí),其它任務(wù)在視頻下方運(yùn)行。用戶(hù)可以調(diào)整視頻窗口的位置。

Android 8.0終于支持自動(dòng)填充功能。Android應(yīng)用現(xiàn)在可以自動(dòng)填充用戶(hù)姓名、密碼和地址等用戶(hù)信息。密碼管理應(yīng)用很早就已經(jīng)支持了這項(xiàng)功能,但是需要通過(guò)復(fù)雜的方法來(lái)實(shí)現(xiàn)?,F(xiàn)在,應(yīng)用可以執(zhí)行自動(dòng)填充應(yīng)用程序接口(API),因此可以實(shí)現(xiàn)更為流暢地整合

Android 8.0 新變化匯總

1、Android 8.0 大幅提升了開(kāi)機(jī)速度

對(duì) Pixel 而言,開(kāi)機(jī)速度提升了一倍,和旗艦機(jī)型三星 Galaxy S8 對(duì)比,嗯,看看開(kāi)心就好。
2、鎖屏界面變化很小,字號(hào)縮小了一圈,為鎖屏壁紙和通知等內(nèi)容留出更多視覺(jué)空間

不過(guò),在動(dòng)輒 0.1、0.2 秒解鎖的指紋識(shí)別普及后,鎖屏界面已不那么重要了。
3、桌面更新體現(xiàn)在「可自定義圖標(biāo)的形狀」上

在 Pixel 桌面,你可以為圖標(biāo)選擇圓形、方形或者圓角矩形等樣式。另一個(gè)細(xì)節(jié)是,以前在 Google Play 市場(chǎng)設(shè)置的「將新應(yīng)用圖標(biāo)添加到桌面」選項(xiàng),如今需要在 Pixel 桌面中設(shè)置。
4、引入了「通知圓點(diǎn)」功能,但不會(huì)顯示具體通知數(shù)量,只會(huì)在圖標(biāo)右上角顯示一個(gè)圓點(diǎn)

這兒有個(gè)細(xì)節(jié),這個(gè)出現(xiàn)在右上角的圓點(diǎn),會(huì)從圖標(biāo)左下角提取顏色,所以每個(gè) APP 的圓點(diǎn)都是不一樣的顏色。
5、長(zhǎng)按圖標(biāo),能看到圖標(biāo)菜單和通知概覽

長(zhǎng)按即可。目前最實(shí)用的,是支付寶的快捷付款功能。

6、全新的狀態(tài)欄

底色從之前的黑色,到第一個(gè)開(kāi)發(fā)者預(yù)覽版時(shí)的黑白任選,再到正式版的只剩下白色,看起來(lái)清爽不少,動(dòng)畫(huà)也更優(yōu)雅。
7、通知欄變得更加可愛(ài)

系統(tǒng)只默認(rèn)完整顯示最頂部的通知,其余通知被壓縮,可以用手勢(shì)下拉查看全部?jī)?nèi)容。還有就是, Google Play Music 和 YouTuBe 的通知,會(huì)根據(jù)內(nèi)容或?qū)]嫹饷嬖鎏硗ㄖ省?br> 8、在展開(kāi)或縮起所有通知時(shí),最左邊的小圖標(biāo)會(huì)有可愛(ài)的動(dòng)畫(huà)出現(xiàn)
9、設(shè)置界面相對(duì)與 Android 7.1.2 引入了層級(jí)概念

將不常用設(shè)置項(xiàng)歸納到一起,保持整體的簡(jiǎn)潔,但也增加了尋找的難度。

10、系統(tǒng)應(yīng)用的默認(rèn)圖標(biāo)統(tǒng)一更新為綠色圓形

這個(gè)圖標(biāo)除了系統(tǒng)應(yīng)用外,一些懶得畫(huà)圖標(biāo)的第三方應(yīng)用也可以直接用上,呵呵,這些開(kāi)發(fā)者是有多懶。

11、安全性選項(xiàng)中,Android 8.0 引入了「Google Play 保護(hù)機(jī)制」

它會(huì)定期檢查手機(jī)所安裝的應(yīng)用是否存在有害行為,如果發(fā)現(xiàn)安全風(fēng)險(xiǎn),系統(tǒng)會(huì)通知用戶(hù)。
12、每個(gè) APP 的「安裝未知應(yīng)用」功能將默認(rèn)被限制

比如在 Chrome 瀏覽器上下載一個(gè) apk 安裝包,如果未經(jīng)允許,這個(gè)安裝包是無(wú)法安裝的。安裝應(yīng)用的過(guò)程中有明確進(jìn)度條可以查看。
13、終于可以直接在鈴聲設(shè)置界面添加第三方手機(jī)鈴聲

不用將喜歡的鈴聲放進(jìn) ringtones 文件夾了。

接下來(lái)要說(shuō)的兩個(gè)功能,幾乎是到了最后的第四個(gè)開(kāi)發(fā)者預(yù)覽版才能夠正常使用。

14、畫(huà)中畫(huà)模式

使用 Chrome 全屏播放視頻或者在 YouTuBe 觀看視頻時(shí),按下 Home 鍵就可以進(jìn)入畫(huà)中畫(huà)模式。

15、Autofill 功能

能夠通過(guò)你存儲(chǔ)在谷歌帳號(hào)上的帳號(hào)密碼,自動(dòng)在登錄應(yīng)用時(shí)填充。
16、在 Android 8.0 的開(kāi)發(fā)者選項(xiàng)中,還出現(xiàn)了藍(lán)牙音頻解碼器加

入了由索尼提供的 LDAC 無(wú)線音效技術(shù),索尼藍(lán)牙耳機(jī)用戶(hù)有福了。另外,像 aptX 和 aptX HD等無(wú)線技術(shù)也有提供。

在沒(méi)有開(kāi)啟開(kāi)發(fā)者選項(xiàng)的情況下,系統(tǒng)會(huì)自動(dòng)幫你做出選擇,比如在連接索尼藍(lán)牙耳機(jī)后,會(huì)自動(dòng)切換到 LDAC 模式,而連接三星藍(lán)牙耳機(jī)時(shí),會(huì)切換回 aptX。

17、智能文本選擇

舉個(gè)例子,在郵件中選擇一個(gè)帶地址的文本,系統(tǒng)除了彈出復(fù)制和全選之外,還會(huì)直接提供谷歌地圖的快捷方式,讓用戶(hù)直接在地圖中查看這個(gè)地址。
18、Pixel 自帶相機(jī)中增加了雙擊放大功能

這功能可能是為雙攝兩倍變焦做準(zhǔn)備的。
19、Emoji 表情也從之前的果凍變成了圓形

個(gè)人感覺(jué)是沒(méi)之前的可愛(ài)。

20、 Android 8.0 正式版的彩蛋跟第四個(gè)開(kāi)發(fā)者預(yù)覽版沒(méi)有區(qū)別,就是一只章魚(yú)

然后你可以按住它的頭劃來(lái)劃去,沒(méi)什么特別。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容