Android5.0,6.0,7.0,8.0新特性整理
背景
Android5.0(Android?Lollipop)是谷歌公司2014年10月發(fā)布的全新安卓系統(tǒng),至今已經(jīng)兩年多。然而由于國產(chǎn)手機(jī)對安卓ROM的深度定制或修改,以及手機(jī)廠商、芯片制造商、運(yùn)營商之間錯綜復(fù)雜的關(guān)系,我們更新最新安卓版本往往需要1年左右時間的等待。2015年5月發(fā)布了Android6.0(Android Marshmallow),2016年8月發(fā)布了Android7.0(Android Nougat)。目前來說,用上6.0系統(tǒng)的手機(jī)都不太多,Android4.4和Android5.1版本占比重較高。但是,隨著時間推移,手機(jī)陸續(xù)都會升級到更高的系統(tǒng)版本,所以,提前學(xué)習(xí)到各版本的新特性,把一下好的效果添加到代碼中,并盡量做到向下兼容,應(yīng)用才能擁有更好的體驗(yàn),面對升級過后的系統(tǒng)才能從容不迫。
概述內(nèi)容
從Android 5.0(Android Lollipop)開始,android迎來了扁平化時代,使用一種新的Material Design 設(shè)計(jì)風(fēng)格,設(shè)計(jì)了全新的通知中心,開始支持多種設(shè)備。在性能上,放棄了之前一直使用的Dalvik虛擬機(jī),改用ART模式,程序加載時間大幅提升。增加了Battery Saver模式來進(jìn)行省電處理,以及全新的“最近應(yīng)用程序”。
Android 6.0(Android Marshmallow)最大的亮點(diǎn)是為用戶提供了兩套相互獨(dú)立的解決方案,簡單的說,就是為每位用戶的每一個應(yīng)用提供了兩套數(shù)據(jù)存儲方案。一套存儲工作資料,另一套存儲個人信息。另外Android M系統(tǒng)層面加入指紋識別,還加入了運(yùn)行時權(quán)限,加入了App Standby(應(yīng)用待機(jī))、Doze(瞌睡)Exemptions(豁免)等模式來加強(qiáng)電源管理。
Android 7.0(Android Nougat),在性能處理有了巨大的提升,同時對文件數(shù)據(jù)加密,更加安全。 添加了分屏多任務(wù),重新設(shè)計(jì)了通知,改進(jìn)Doze休眠機(jī)制等。總而言之,Android N將更快,更高,更強(qiáng)。
Android 5.0新特性
Material Design
提起Android5.0,就不得不說Material Design,扁平化的設(shè)計(jì)理念。新的視覺語言,在基本元素的處理上,借鑒了傳統(tǒng)的印刷設(shè)計(jì),字體版式、網(wǎng)格系統(tǒng)、空間、比例、配色、圖像使用等這些基礎(chǔ)的平面設(shè)計(jì)規(guī)范。
之前的一些需要自定義的效果,現(xiàn)在都提供了系統(tǒng)級的支持,用起來更加方便了,而且android提供的效果看起來更加流暢。這里篇幅較多,本著不重復(fù)造輪子的思想,筆者找了一片寫的很全面的Material Design的網(wǎng)站,圖文并茂,值得學(xué)習(xí)。
Meterial Design開發(fā)者參考文檔。?http://www.materialdoc.cn/
支持多種設(shè)備
現(xiàn)在無論是智能手機(jī)、平板電腦、筆記本電腦、智能電視、汽車、智能手表甚至是各種家用電子產(chǎn)品,谷歌的Android系統(tǒng)已經(jīng)可以在所有設(shè)備的屏幕上出現(xiàn)。而這一概念與微軟不謀而合,之前微軟也宣布將會把Windows 10打造成跨設(shè)備跨平臺的統(tǒng)一系統(tǒng),幫助自己走出困境。
全新通知中心設(shè)計(jì)
谷歌在Android Lollipop中加入了全新風(fēng)格的通知系統(tǒng)。改進(jìn)后的通知系統(tǒng)會優(yōu)先顯示對用戶來說比較重要的信息,而將不太緊急的內(nèi)容隱藏起來。用戶只需要向下滑動就可以查看全部的通知內(nèi)容。
新的通知系統(tǒng)另外一個很酷的新功能是在鎖屏界面也可以直接查看通知消息了。不僅如此,用戶還可以直接在鎖屏的情況下就行回復(fù)或進(jìn)入應(yīng)用。另外,如果在操作手機(jī)的過程中有電話進(jìn)入,也不會進(jìn)行全畫面切換,而是同樣以彈出通知的方式告知用戶。
支持64位ART虛擬機(jī)
新系統(tǒng)不僅在視覺效果上帶來了巨大的變化,Android Lollipop還在內(nèi)部的性能上進(jìn)行了飛躍。首先,新系統(tǒng)放棄了之前一直使用的Dalvik虛擬機(jī),改用了ART模式,實(shí)現(xiàn)了真正的跨平臺編譯,在ARM、X86、MIPS等,無處不在。
ART 虛擬機(jī)編譯器在內(nèi)存占用及應(yīng)用程序加載時間上進(jìn)行了大幅提升,谷歌承諾所有性能都會比原來提升一倍。另外,對64位的支持也讓ART虛擬機(jī)如魚得水,開發(fā)者可以針對像ARM Cortex-A57這樣的64位架構(gòu)核心開發(fā)應(yīng)用程序。Android Lollipop支持更大的寄存器,支持新的指令集,提升了內(nèi)存尋址空間,未來Android智能手機(jī)將支持4GB以上的內(nèi)存。
《Android ART運(yùn)行時無縫替換Dalvik虛擬機(jī)的過程分析》?http://blog.csdn.net/luoshengyang/article/details/18006645
Project Volta電池續(xù)航改進(jìn)計(jì)劃
Project Volta計(jì)劃增加了新工具可以讓開發(fā)者能夠更容易的找出為何自己的應(yīng)用程序會對電量產(chǎn)生比較大的影響,同時確保在執(zhí)行某型任務(wù)時將手機(jī)電量的影響降至最低。首先,Battery Historian可以列出手機(jī)電量消耗的詳細(xì)情況,幫助開發(fā)者識別電量消耗的原因或者是哪個硬件或任務(wù)對電池壽命的影響比較大;而Job Scheduler API則可以讓開發(fā)者更容易的選擇合適的時機(jī)觸發(fā)電量消耗比較高的任務(wù),避免在低電量或未完成充電時更新應(yīng)用程序。
上面是針對開發(fā)者的改進(jìn),而在用戶層面上,Android Lollipop增加了Battery Saver模式,這與三星和HTC上的超級省電模式有些類似。在低電量的時候系統(tǒng)會自動降低屏幕亮度、限制自動更換背景等功能。
全新的“最近應(yīng)用程序”
除了界面風(fēng)格設(shè)計(jì)的改變之外,新的最近應(yīng)用界面還借鑒了Chrome瀏覽器的理念,采用單獨(dú)的標(biāo)簽展示方式。更重要的是,谷歌已經(jīng)向開發(fā)者開放了API,所以第三方開發(fā)人員可以利用這個改進(jìn)為特定的應(yīng)用增加全新的功能。
改進(jìn)安全性
現(xiàn)在個人識別解鎖還是一個比較新鮮的智能概念,當(dāng)用戶的藍(lán)牙耳機(jī)連接到手機(jī)或平板電腦時,設(shè)備可以基于當(dāng)前的位置或用戶的聲音自動解鎖。比如當(dāng)特定的智能手表出現(xiàn)在Android設(shè)備的附近,那么就會直接繞過鎖屏界面進(jìn)行操作。而Android Lollipop也增加了這種針對特定特任識別解鎖的模式。換句話說,當(dāng)設(shè)備沒有檢測到附近有可用的信任設(shè)備時,就會啟動安全模式防止未授權(quán)訪問。
另外,Android Lollipop還默認(rèn)開啟了系統(tǒng)數(shù)據(jù)加密功能,并且通過SELinux執(zhí)行應(yīng)用程序,這就意味著對于惡意軟件來說,新系統(tǒng)變得更加安全。
不同數(shù)據(jù)獨(dú)立保存
谷歌表示Android Lollipop將擁有一個全新的特性,讓用戶通過一臺設(shè)備就可以搞定所有的工作和生活娛樂活動。該特性首先將各種數(shù)據(jù)獨(dú)立保存,并且讓所有新數(shù)據(jù)的生成都有依據(jù)。
我們已經(jīng)看到谷歌已經(jīng)與三星加強(qiáng)了合作,包括三星的Knox安全系統(tǒng)同樣可以像Android Lollipop一樣將重要數(shù)據(jù)和其它數(shù)據(jù)分開保存。另外谷歌還允許向三星以外的Android設(shè)備提供支持。
改進(jìn)搜索
谷歌將新系統(tǒng)的搜索功能重點(diǎn)放在了“重新發(fā)現(xiàn)”上,因此這意味著Google Search將會更好的意識到用戶正在做什么。比如系統(tǒng)會根據(jù)用戶當(dāng)前的位置自動過濾無關(guān)的搜索結(jié)果。
另外,當(dāng)用戶在進(jìn)行應(yīng)用搜索時,可以直接展示相似或部分提示,并且進(jìn)入特定的應(yīng)用程序而無需將內(nèi)容全部輸入。
支持藍(lán)牙4.1、USB Audio、多人分享等其它特性
Android Lollipop還增加了多個新的API支持、藍(lán)牙4.1、USB Audio外接音響及多人分享等功能。其中多人分享功能可以在用戶手機(jī)丟失的情況下,使用其它Lollipop設(shè)備登錄賬戶,從云端下載聯(lián)系人、日歷等資料,并且不影響其它設(shè)備的內(nèi)容。
Android 6.0 新特性
動態(tài)權(quán)限管理
Android 6.0引入了動態(tài)權(quán)限管理,將標(biāo)記為危險的權(quán)限從安裝時權(quán)限(Install Time Permission)模型移動到運(yùn)行時權(quán)限模型(Runtime Permissions):
安裝時權(quán)限模型(Android5.1以及更早):用戶在應(yīng)用安裝和更新時,對危險權(quán)限授權(quán)。但是OEM和運(yùn)行商預(yù)裝的應(yīng)用將自動預(yù)授權(quán)。
運(yùn)行時權(quán)限(Android6.0及以后):用戶在應(yīng)用運(yùn)行時,對應(yīng)用授予危險權(quán)限。由應(yīng)用決定何時去申請權(quán)限(例如,在應(yīng)用啟動時或者用戶訪問某個特性時),但必須容許用戶來授予或者拒絕應(yīng)用對特定權(quán)限組的訪問。OEM和運(yùn)營商可以預(yù)裝應(yīng)用,但是不能對權(quán)限進(jìn)行預(yù)授權(quán)。
運(yùn)行時權(quán)限提供給用戶關(guān)于應(yīng)用所需權(quán)限更多的相關(guān)上下文和可視性,這也讓開發(fā)者幫助用戶更好的理解:為什么應(yīng)用需要所請求的權(quán)限,授權(quán)將有什么樣的好處,拒絕將有何種不便。用戶可以通過設(shè)置中的菜單來撤銷應(yīng)用的權(quán)限。
受影響的權(quán)限
系統(tǒng)要求標(biāo)記為危險(dangerous)的權(quán)限使用運(yùn)行時權(quán)限模型。查看危險權(quán)限列表可以使用命令:adb shell pm list permissions -g -d 。
Android6.0并不改變正常權(quán)限的行為。正常權(quán)限指的是所有非危險(non-dangerous)權(quán)限,包括normal,system和signature 權(quán)限。正常權(quán)限風(fēng)險較低,用于容許應(yīng)用以最小風(fēng)險來訪問隔離的應(yīng)用級別的特性。在Android5.1和早期版本中,系統(tǒng)在安裝時自動將正常權(quán)限授予請求的應(yīng)用,并不提示用戶
請求權(quán)限
運(yùn)行時權(quán)限模型適用于所有應(yīng)用,包括預(yù)裝應(yīng)用。應(yīng)用軟件的要求包括:
運(yùn)行時權(quán)限模型必須在所有運(yùn)行Android6.0的設(shè)備上是一致的。這通過CTS來實(shí)施。
應(yīng)用必須在運(yùn)行時提示用戶進(jìn)行授權(quán)。
帶有危險權(quán)限的預(yù)裝應(yīng)用,必須符合API level 23,必須維護(hù)Android6.0的AOSP權(quán)限模型(例如,應(yīng)用安裝的UI流程不應(yīng)該脫離AOSP的packageInstaller的實(shí)現(xiàn);用戶可以撤銷預(yù)裝應(yīng)用的危險權(quán)限;等等)。
無界面的應(yīng)用必須使用Activity來申請權(quán)限,或者與其他有相應(yīng)權(quán)限的應(yīng)用共享UID。
權(quán)限遷移
在設(shè)備從Android5.x升級到Android6.0之后,授予應(yīng)用的權(quán)限仍然有效。但是用戶可以在任何時候撤銷這些權(quán)限。
《Android 6.0: 動態(tài)權(quán)限管理的解決方案》http://blog.csdn.net/caroline_wendy/50587230
指紋識別(Fingerprint Support)
說到指紋識別,很多用戶都會覺得現(xiàn)在的中高端安卓手機(jī)都支持,但事實(shí)上這些安卓手機(jī)的指紋識別都是各個廠商自行開發(fā)的并沒有系統(tǒng)底層的支持。Android 6.0則在系統(tǒng)層面加入指紋識別,能提供原生指紋識別API,這不但降低了廠商開發(fā)指紋識別模塊的成本,最重要的是原生指紋識別將會大大提升安卓手機(jī)的指紋識別支付安全性。
APP關(guān)聯(lián)(App Links)
Android M加強(qiáng)了軟件間的關(guān)聯(lián),谷歌在現(xiàn)場展示了一個例子,比如你的手機(jī)郵箱里收到一封郵件,內(nèi)文里有以個Twitter鏈接,用戶點(diǎn)擊該鏈接可以直接跳轉(zhuǎn)到Twitter應(yīng)用,而不再是網(wǎng)頁。
Chrome App Links這個就相當(dāng)于在Web中使用Scheme來進(jìn)行App的跳轉(zhuǎn)功能一樣,只不過這里Chrome默認(rèn)就支持了,用戶只需要搜索相關(guān)的關(guān)鍵詞,就可以直接顯示App,然后通過App Link直接啟動App。這個東西對用戶來說應(yīng)該是一件非常好、方便的事情,但由于國內(nèi)這些瀏覽器的問題,不知道能否會兼容這個功能。
Android pay
Android支付統(tǒng)一標(biāo)準(zhǔn)。新的M系統(tǒng)中集成了Android Pay。其特性在于簡潔、安全、可選性。Android Pay是一個開放性平臺,用戶可以選擇谷歌的服務(wù)或者使用銀行的APP來使用它,Android Pay支持4.4以后系統(tǒng)設(shè)備,谷歌宣布Android Pay已經(jīng)與美國三大運(yùn)營商700多家商店達(dá)成合作,支付功能可以使用指紋來進(jìn)行支付。
電源管理
Android6.0引入了下列特性來延長電池使用時間:
App Standby(應(yīng)用待機(jī)): 系統(tǒng)可以將未使用的應(yīng)用置為AppStandby模式,臨時限制這些應(yīng)用的網(wǎng)絡(luò)訪問,延遲同步和后臺job
Doze(瞌睡): 如果用戶在某個時間期限內(nèi)未主動使用設(shè)備(屏幕關(guān)閉、設(shè)備靜止),平臺將進(jìn)入深度睡眠狀態(tài)。因?yàn)樵撎匦砸笃脚_檢測靜止?fàn)顟B(tài),因此只有那些在Sensor HAL中實(shí)現(xiàn)了顯式移動檢測API的設(shè)備中才有效。
Exemptions(豁免): 預(yù)裝在設(shè)備上的系統(tǒng)應(yīng)用和云消息服務(wù),默認(rèn)通常被豁免。應(yīng)用開發(fā)者可以要求其應(yīng)用使用這種設(shè)定。用戶也可以在設(shè)置中來豁免某些應(yīng)用。
App Standby
對于不常用的應(yīng)用的,AppStandby通過延遲后臺網(wǎng)絡(luò)活動和任務(wù)來延長電池壽命。?
生命周期
- 檢測:當(dāng)設(shè)備不在充電時,且在某個特定時鐘期限內(nèi)和亮屏?xí)r長中,用戶沒有直接或者間接啟動該應(yīng)用。間接啟動指的是:前臺應(yīng)用訪問另外某個應(yīng)用的service。
- App Standy模式中:平臺限制應(yīng)用一天內(nèi)最多訪問一次網(wǎng)絡(luò),延遲其同步和其他后臺任務(wù)。
- 退出:當(dāng)應(yīng)用被激活,或者設(shè)備充電時,平臺將該應(yīng)用移出App Standby狀態(tài)。
活動的應(yīng)用不受AppStandby的影響。活動的含義是:
進(jìn)程處于前臺(Activity 或者前臺服務(wù),或者由另外一個Activity 或前臺服務(wù)所使用),例如 notification listener,輔助服務(wù),live 墻紙,等等。
供用戶查看的通知,可以是鎖屏通知或者通知圖標(biāo)。
用戶顯式啟動的應(yīng)用。
Doze
支持Doze功能的要求:
設(shè)備在Sensor HAL實(shí)現(xiàn)了significant motion detector (SMD) APIs 。
設(shè)備有某個云消息服務(wù),如 Google Cloud Messaging (GCM)。這使得設(shè)備可以知道何時從Doze中喚醒。
生命周期
- 檢測:當(dāng)未在充電時,且當(dāng)設(shè)備靜止且滅屏了一段時間。
- Doze期間:平臺嘗試讓系統(tǒng)處于休眠狀態(tài),周期性地進(jìn)入在一個維持窗口恢復(fù)正常操作,然后進(jìn)入更長的休眠狀態(tài)。在休眠狀態(tài):?
禁止網(wǎng)絡(luò)訪問?
忽略 wakelock?
延遲鬧鐘,除了鬧鈴 和使用setAndAllowWhileIdle()設(shè)置的鬧鐘,以榮喜日歷等應(yīng)用顯示事件提醒?
停止WIFI掃描?
同步和后臺任務(wù)被推遲到下一個維護(hù)窗口。?
接收短信和MMS消息的應(yīng)用位于一個臨時白名單,這樣他們可以完成其工作。 - 退出:?
用戶交互?
設(shè)備移動?
亮屏?
鬧鈴
集成Doze
Use the new power-saving optimization guidelines. For details, see Testing and optimizing applications.?
OR,Are exempted from Doze and App Standby. For details, see Exempting applications.
Exemptions
你可以在設(shè)置中,手動將某些應(yīng)用從Doze和AppStandby中排除。
存儲
在之前,安卓系統(tǒng)雖然可以支持TF卡擴(kuò)展,但TF卡擴(kuò)展的容量只能當(dāng)成外置存儲。雖然用戶可以把照片、音樂等內(nèi)容放進(jìn)去,但App不能安裝到其中。在安卓6.0中,當(dāng)首次插入TF卡的時候,系統(tǒng)會詢問會將TF卡作為外置還是內(nèi)置儲存。如果選擇作為內(nèi)置存儲,系統(tǒng)則會對TF卡格式化并加密——注意,這會丟失數(shù)據(jù)!然后,TF卡的容量就和設(shè)備的內(nèi)置存儲融合了。
一般來說,設(shè)備的內(nèi)置存儲速度會比TF卡快上不少,穩(wěn)定性也更高,因此如果不是容量特別緊張,并不建議把TF當(dāng)成內(nèi)置儲存植入。同時,市面上支持TF卡擴(kuò)展的安卓設(shè)備也越來越少,安卓6.0的這個新特性也許會遭到冷遇。
《Android數(shù)據(jù)存儲之Android 6.0運(yùn)行時權(quán)限下文件存儲的思考》http://www.cnblogs.com/whoislcj/p/6137398.html?
《Android6.0權(quán)限適配之WRITE_EXTERNAL_STORAGE(SD卡寫入)》?
http://unclechen.github.io/2016/03/06/
Android 7.0 新特性
Android7.0提供新功能以提升性能、生產(chǎn)效率和安全性。
關(guān)于Android N的性能改進(jìn),Android N建立了先進(jìn)的圖形處理Vulkan系統(tǒng),能少的減少對CPU的占用。與此同時,Android N加入了JIT編譯器,安裝程序快了75%,所占空間減少了50%。
在安全性上,Android N加入了全新安全性能,其中包括基于文件的數(shù)據(jù)加密。谷歌移動版Chrome能識別惡意網(wǎng)站。
Android N可以進(jìn)行無縫更新,與Chromebook一樣,用戶將不再需要下載安裝,也不再需要進(jìn)行重啟。
在效率提升上,Android N可以自動關(guān)閉用戶較長時間未使用的應(yīng)用程序。在通知上新增了直接回復(fù)功能,并支持一鍵全部清除功能
分屏多任務(wù)
進(jìn)入后臺多任務(wù)管理頁面,然后按住其中一個卡片,然后向上拖動至頂部即可開啟分屏多任務(wù),支持上下分欄和左右分欄,允許拖動中間的分割線調(diào)整兩個APP所占的比例。
全新下拉快捷開關(guān)頁
在Android 7.0中,下拉打開通知欄頂部即可顯示5個用戶常用的快捷開關(guān),支持單擊開關(guān)以及長按進(jìn)入對應(yīng)設(shè)置。如果繼續(xù)下拉通知欄即可顯示全部快捷開關(guān),此外在快捷開關(guān)頁右下角也會顯示一個“編輯”按鈕,點(diǎn)擊之后即可自定義添加/刪除快捷開關(guān),或拖動進(jìn)行排序。
新通知消息
通知消息快捷回復(fù)
加入了全新的API,支持第三方應(yīng)用通知的快捷操作和回復(fù),例如來電會以橫幅方式在屏幕頂部出現(xiàn),提供接聽/掛斷兩個按鈕;信息/社交類應(yīng)用通知,還可以直接打開鍵盤,在輸入欄里進(jìn)行快捷回復(fù)。
通知消息歸攏
Android7.0會將同一應(yīng)用的多條通知提示消息歸攏為一項(xiàng),點(diǎn)擊該項(xiàng)即可展開此前的全部通知,允許用戶對每個通知執(zhí)行單獨(dú)操作。
夜間模式
Android7.0中重新加入了夜間深色主題模式,該功能依然需要在系統(tǒng)調(diào)諧器中開啟,從頂部下劃打開快捷設(shè)置頁,然后長按其中的設(shè)置圖標(biāo),齒輪旋轉(zhuǎn)10秒鐘左右即可提示已開啟系統(tǒng)調(diào)諧器,之后用戶在設(shè)置中即可找到“系統(tǒng)調(diào)諧器”設(shè)置項(xiàng)。點(diǎn)開其中的“色彩和外觀”,即可找到夜間模式,開啟后即可使用全局的深色主題模式,同時亮度和色彩也會進(jìn)行一定的調(diào)整,該功能可以基于時間或地理位置自動開啟。另外,系統(tǒng)調(diào)諧器中也提供了RGB紅綠藍(lán)三色調(diào)節(jié)滑動條,允許用戶手動精細(xì)調(diào)節(jié),例如減少藍(lán)色或增加紅色以提供類似護(hù)眼模式的效果。
流量保護(hù)模式
新增的流量保護(hù)模式不僅可以禁止應(yīng)用在后臺使用流量,還會進(jìn)一步減少該應(yīng)用在前臺時的流量使用。推測其有可能使用了類似Chrome瀏覽器的數(shù)據(jù)壓縮技術(shù)。此外,谷歌還擴(kuò)展了ConnectivityManager API的能力,使得應(yīng)用可以檢測系統(tǒng)是否開啟了流量保護(hù)模式,或者檢測自己是否在白名單中。Android7.0允許用戶單獨(dú)針對每個應(yīng)用,選擇是否開啟數(shù)據(jù)保護(hù)模式。
全新設(shè)置樣式
Android7.0啟用了全新的設(shè)置樣式,首先每個分類下各個子項(xiàng)之間的分割線消失了,只保留分類之間的分割線。全新的設(shè)置菜單還提供了一個綠色的頂欄,允許用戶通過后方的下拉箭頭,快速設(shè)定勿擾模式等。除了勿擾模式外,頂欄菜單還可以顯示諸多其他的設(shè)置狀態(tài),例如數(shù)據(jù)流量的使用情況,自動亮度是否開啟等。谷歌也在安卓7.0的設(shè)置中加入了漢堡菜單,在二級設(shè)置界面中的左上角,你就會看到這個漢堡菜單,點(diǎn)擊后即可看到所有設(shè)置項(xiàng),方便用戶快速跳轉(zhuǎn)。
改進(jìn)的Doze休眠機(jī)制
谷歌在Android7.0中對Doze休眠機(jī)制做了進(jìn)一步的優(yōu)化,在此前的Android6.0中,Doze深度休眠機(jī)制對于改善安卓的續(xù)航提供了巨大的作用。而在Android67.0中,谷歌對Doze進(jìn)行了更多的優(yōu)化,休眠機(jī)制的使用規(guī)則和場景有所擴(kuò)展,例如只要手動在后臺刪掉應(yīng)用卡片,關(guān)屏后該應(yīng)用就會被很快深度休眠。
系統(tǒng)級電話黑名單功能
Android7.0將電話攔截功能變成了一個系統(tǒng)級功能。其它應(yīng)用可以調(diào)用這個攔截名單,但只有個別應(yīng)用可以寫入,包括撥號應(yīng)用、默認(rèn)的短信應(yīng)用等。被攔截號碼將不會出現(xiàn)在來電記錄中,也不會出現(xiàn)通知。另外用戶也可以通過賬戶體系備份和恢復(fù)這個攔截名單,以便快速導(dǎo)入其它設(shè)備或賬號。
菜單鍵快速應(yīng)用切換
雙擊菜單鍵,就能自動切換到上一個應(yīng)用。此外,如果你不停地點(diǎn)擊菜單鍵的話,就會在所有應(yīng)用中不間斷地輪換,應(yīng)用窗口會自動放大,頂部還會出現(xiàn)倒計(jì)時條,停止點(diǎn)擊且倒計(jì)時結(jié)束后,當(dāng)前應(yīng)用會自動放大并返回到前臺。
對于開發(fā)的影響
各個新版本的Android系統(tǒng)除了提供了諸多新特性和功能外,還對系統(tǒng)和API行為做出了各種變更。以下重點(diǎn)介紹您應(yīng)該了解并在開發(fā)應(yīng)用時加以考慮的一些主要變更。(其中某些變更與上面提到的新特性有重復(fù)的地方,姑且聽之)
Android 5.0行為變更
API級別:21
1. Android Runtime(ART)
大多數(shù) Android 應(yīng)用無需任何更改就可以在 ART 下工作。不過,部分適合 Dalvik 的技術(shù)并不適用于 ART。如需了解有關(guān)最重要問題的信息,請參閱在 Android Runtime (ART) 上驗(yàn)證應(yīng)用行為。如存在以下情況,應(yīng)特別注意:
您的應(yīng)用使用 Java 原生接口 (JNI) 運(yùn)行 C/C++ 代碼。
您使用生成非標(biāo)準(zhǔn)代碼的開發(fā)工具(例如,一些代碼混淆工具)。
您使用與壓縮垃圾回收不兼容的技術(shù)
- 1
- 1
2. 聲音和振動
如果您當(dāng)前使用 Ringtone、MediaPlayer 或 Vibrator 類向通知中添加聲音和振動,則移除此代碼,以便系統(tǒng)可以在“優(yōu)先”模式中正確顯示通知。取而代之的是,使用 Notification.Builder 方法添加聲音和振動。
將設(shè)備設(shè)為 RINGER_MODE_SILENT 可使設(shè)備進(jìn)入新的優(yōu)先模式。如果您將設(shè)備設(shè)為 RINGER_MODE_NORMAL 或 RINGER_MODE_VIBRATE,則設(shè)備將退出優(yōu)先模式。
以前,Android 使用 STREAM_MUSIC 作為主流式傳輸來控制平板電腦設(shè)備上的音量。在 Android 5.0 中,手機(jī)和平板電腦設(shè)備的主音量流式傳輸現(xiàn)已合并,由 STREAM_RING 或 STREAM_NOTIFICATION 進(jìn)行控制。
3. 鎖定屏幕可見性
默認(rèn)情況下,在 Android 5.0 中,通知現(xiàn)在顯示在用戶的鎖定屏幕上。用戶可以選擇保護(hù)敏感信息不被公開,在此情況下,系統(tǒng)會自動刪減通知顯示的文本。要自定義此刪減的通知,請使用 setPublicVersion()。
如果通知不包含個人信息,或者您想允許媒體播放控件顯示在通知上,則調(diào)用 setVisibility() 方法并將通知的可見性級別設(shè)為 VISIBILITY_PUBLIC。
4. 浮動通知
現(xiàn)在,當(dāng)設(shè)備處于活動狀態(tài)時(即,設(shè)備未鎖定且其屏幕已打開),通知可以顯示在小型浮動窗口中(也稱為“浮動通知”)。這些通知看上去類似于精簡版的通知,只是浮動通知還顯示操作按鈕。用戶可以在不離開當(dāng)前應(yīng)用的情況下處理或清除浮動通知。
可能觸發(fā)浮動通知的條件示例包括:
-
用戶的 Activity 處于全屏模式中(應(yīng)用使用 fullScreenIntent)
-
通知具有較高的優(yōu)先級并使用鈴聲或振動
如果您的應(yīng)用在以上任何情形下實(shí)現(xiàn)通知,請確保系統(tǒng)正確顯示浮動通知。
5. getRecentTasks()
為提升用戶隱私的安全性,現(xiàn)已棄用 ActivityManager.getRecentTasks() 方法。對于向后兼容性,此方法仍會返回它的一小部分?jǐn)?shù)據(jù),包括調(diào)用應(yīng)用自己的任務(wù)和可能的一些其他非敏感任務(wù)(如首頁)。如果您的應(yīng)用使用此方法檢索它自己的任務(wù),則改用 getAppTasks() 檢索該信息。
6. 綁定到服務(wù)
Context.bindService() 方法現(xiàn)在需要顯式 Intent,如果提供隱式 intent,將引發(fā)異常。為確保應(yīng)用的安全性,請使用顯式 intent 啟動或綁定 Service,且不要為服務(wù)聲明 intent 過濾器。
7. webview
Android 5.0 更改了應(yīng)用的默認(rèn)行為。
如果您的應(yīng)用是面向 API 級別 21 或更高級別:
默認(rèn)情況下,系統(tǒng)會阻止混合內(nèi)容和第三方 Cookie。要允許混合內(nèi)容和第三方 Cookie,請分別使用 setMixedContentMode() 和 setAcceptThirdPartyCookies() 方法。
系統(tǒng)現(xiàn)在可以智能地選擇要繪制的 HTML 文檔部分。這個新的默認(rèn)行為有助于減少內(nèi)存占用和提升性能。如果您要一次渲染整個文檔,可通過調(diào)用 enableSlowWholeDocumentDraw() 停用此優(yōu)化。
如果您的應(yīng)用是面向低于 21 的 API 級別:系統(tǒng)允許混合內(nèi)容和第三方 Cookie,并始終一次渲染整個文檔。
Android 6.0行為變更
API級別:23
1. 運(yùn)行時權(quán)限
對于以 Android 6.0(API 級別 23)或更高版本為目標(biāo)平臺的應(yīng)用,請務(wù)必在運(yùn)行時檢查和請求權(quán)限。要確定您的應(yīng)用是否已被授予權(quán)限,請調(diào)用新增的 checkSelfPermission() 方法。要請求權(quán)限,請調(diào)用新增的 requestPermissions() 方法。即使您的應(yīng)用并不以 Android 6.0(API 級別 23)為目標(biāo)平臺,您也應(yīng)該在新權(quán)限模式下測試您的應(yīng)用。
2. 取消支持Apache HTTP客戶端
Android 6.0 版移除了對 Apache HTTP 客戶端的支持。如果您的應(yīng)用使用該客戶端,并以 Android 2.3(API 級別 9)或更高版本為目標(biāo)平臺,請改用 HttpURLConnection 類。此 API 效率更高,因?yàn)樗梢酝ㄟ^透明壓縮和響應(yīng)緩存減少網(wǎng)絡(luò)使用,并可最大限度降低耗電量。要繼續(xù)使用 Apache HTTP API,您必須先在 build.gradle 文件中聲明以下編譯時依賴項(xiàng):
android {
useLibrary 'org.apache.http.legacy'
}
- 1
- 1
- ?
3. BoringSSL
Android 正在從使用 OpenSSL 庫轉(zhuǎn)向使用 BoringSSL 庫。如果您要在應(yīng)用中使用 Android NDK,請勿鏈接到并非 NDK API 組成部分的加密庫,如 libcrypto.so 和 libssl.so。這些庫并非公共 API,可能會在不同版本和設(shè)備上毫無征兆地發(fā)生變化或出現(xiàn)故障。此外,您還可能讓自己暴露在安全漏洞的風(fēng)險之下。請改為修改原生代碼,以通過 JNI 調(diào)用 Java 加密 API,或靜態(tài)鏈接到您選擇的加密庫。
4. 通知
此版本移除了?Notification.setLatestEventInfo()?方法。請改用 Notification.Builder 類來構(gòu)建通知。要重復(fù)更新通知,請重復(fù)使用 Notification.Builder 實(shí)例。調(diào)用 build() 方法可獲取更新后的 Notification 實(shí)例。
adb shell dumpsys notification?命令不再打印輸出您的通知文本。請改用?adb shell dumpsys notification --noredact?命令打印輸出 notification 對象中的文本。
5. 音頻管理器變更
不再支持通過 AudioManager 類直接設(shè)置音量或?qū)⑻囟ㄒ纛l流靜音。setStreamSolo() 方法已棄用,您應(yīng)該改為調(diào)用 requestAudioFocus() 方法。類似地,setStreamMute() 方法也已棄用,請改為調(diào)用 adjustStreamVolume() 方法并傳入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE。
6. 相機(jī)服務(wù)變更
在此版本中,相機(jī)服務(wù)中共享資源的訪問模式已從之前的“先到先得”訪問模式更改為高優(yōu)先級進(jìn)程優(yōu)先的訪問模式。對服務(wù)行為的變更包括:
根據(jù)客戶端應(yīng)用進(jìn)程的“優(yōu)先級”授予對相機(jī)子系統(tǒng)資源的訪問權(quán),包括打開和配置相機(jī)設(shè)備。帶有對用戶可見 Activity 或前臺Activity 的應(yīng)用進(jìn)程一般會被授予較高的優(yōu)先級,從而使相機(jī)資源的獲取和使用更加可靠;
當(dāng)高優(yōu)先級的應(yīng)用嘗試使用相機(jī)時,系統(tǒng)可能會“驅(qū)逐”正在使用相機(jī)客戶端的低優(yōu)先級應(yīng)用。在已棄用的 Camera API 中,這會導(dǎo)致系統(tǒng)為被驅(qū)逐的客戶端調(diào)用 onError()。在 Camera2 API 中,這會導(dǎo)致系統(tǒng)為被驅(qū)逐的客戶端調(diào)用onDisconnected();
在配備相應(yīng)相機(jī)硬件的設(shè)備上,不同的應(yīng)用進(jìn)程可同時獨(dú)立打開和使用不同的相機(jī)設(shè)備。但現(xiàn)在,如果在多進(jìn)程用例中同時訪問相機(jī)會造成任何打開的相機(jī)設(shè)備的性能或能力嚴(yán)重下降,相機(jī)服務(wù)會檢測到這種情況并禁止同時訪問。即使并沒有其他應(yīng)用直接嘗試訪問同一相機(jī)設(shè)備,此變更也可能導(dǎo)致低優(yōu)先級客戶端被“驅(qū)逐”。
更改當(dāng)前用戶會導(dǎo)致之前用戶帳戶擁有的應(yīng)用內(nèi)活動相機(jī)客戶端被驅(qū)逐。對相機(jī)的訪問僅限于訪問當(dāng)前設(shè)備用戶擁有的用戶個人資料。舉例來說,這意味著,當(dāng)用戶切換到其他帳戶后,“來賓”帳戶實(shí)際上無法讓使用相機(jī)子系統(tǒng)的進(jìn)程保持運(yùn)行狀態(tài)
Android 7.0行為變更
API級別:24
1. 電池和內(nèi)存
Android 7.0 包括旨在延長設(shè)備電池壽命和減少 RAM 使用的系統(tǒng)行為變更。這些變更可能會影響您的應(yīng)用訪問系統(tǒng)資源,以及您的應(yīng)用通過特定隱式 intent 與其他應(yīng)用交互的方式。
2. Project Svelte:后臺優(yōu)化
Android 7.0 移除了三項(xiàng)隱式廣播,以幫助優(yōu)化內(nèi)存使用和電量消耗。此項(xiàng)變更很有必要,因?yàn)殡[式廣播會在后臺頻繁啟動已注冊偵聽這些廣播的應(yīng)用。刪除這些廣播可以顯著提升設(shè)備性能和用戶體驗(yàn)。
移動設(shè)備會經(jīng)歷頻繁的連接變更,例如在 WLAN 和移動數(shù)據(jù)之間切換時。目前,可以通過在應(yīng)用清單中注冊一個接收器來偵聽隱式 CONNECTIVITY_ACTION 廣播,讓應(yīng)用能夠監(jiān)控這些變更。由于很多應(yīng)用會注冊接收此廣播,因此單次網(wǎng)絡(luò)切換即會導(dǎo)致所有應(yīng)用被喚醒并同時處理此廣播。
同理,在之前版本的 Android 中,應(yīng)用可以注冊接收來自其他應(yīng)用(例如相機(jī))的隱式 ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO 廣播。當(dāng)用戶使用相機(jī)應(yīng)用拍攝照片時,這些應(yīng)用即會被喚醒以處理廣播。
為緩解這些問題,Android 7.0 應(yīng)用了以下優(yōu)化措施:
面向 Android 7.0 開發(fā)的應(yīng)用不會收到 CONNECTIVITY_ACTION 廣播,即使它們已有清單條目來請求接受這些事件的通知。在前臺運(yùn)行的應(yīng)用如果使用 BroadcastReceiver 請求接收通知,則仍可以在主線程中偵聽 CONNECTIVITY_CHANGE。
應(yīng)用無法發(fā)送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 廣播。此項(xiàng)優(yōu)化會影響所有應(yīng)用,而不僅僅是面向 Android 7.0 的應(yīng)用。
如果您的應(yīng)用使用任何 intent,您仍需要盡快移除它們的依賴關(guān)系,以正確適配 Android 7.0 設(shè)備。Android 框架提供多個解決方案來緩解對這些隱式廣播的需求。例如,JobScheduler API 提供了一個穩(wěn)健可靠的機(jī)制來安排滿足指定條件(例如連入無限流量網(wǎng)絡(luò))時所執(zhí)行的網(wǎng)絡(luò)操作。您甚至可以使用 JobScheduler 來適應(yīng)內(nèi)容提供程序變化。
3. 系統(tǒng)權(quán)限更改
為了提高私有文件的安全性,面向 Android 7.0 或更高版本的應(yīng)用私有目錄被限制訪問 (0700)。此設(shè)置可防止私有文件的元數(shù)據(jù)泄漏,如它們的大小或存在性。此權(quán)限更改有多重副作用:
1.私有文件的文件權(quán)限不應(yīng)再由所有者放寬,為使用 MODE_WORLD_READABLE 和/或 MODE_WORLD_WRITEABLE 而進(jìn)行的此類嘗試將觸發(fā) SecurityException。?
注:迄今為止,這種限制尚不能完全執(zhí)行。應(yīng)用仍可能使用原生 API 或 File API 來修改它們的私有目錄權(quán)限。但是,我們強(qiáng)烈反對放寬私有目錄的權(quán)限。
2.傳遞軟件包網(wǎng)域外的 file:// URI 可能給接收器留下無法訪問的路徑。因此,嘗試傳遞 file:// URI 會觸發(fā) FileUriExposedException。分享私有文件內(nèi)容的推薦方法是使用 FileProvider。
3.DownloadManager 不再按文件名分享私人存儲的文件。舊版應(yīng)用在訪問 COLUMN_LOCAL_FILENAME 時可能出現(xiàn)無法訪問的路徑。面向 Android 7.0 或更高版本的應(yīng)用在嘗試訪問 COLUMN_LOCAL_FILENAME 時會觸發(fā) SecurityException。通過使用DownloadManager.Request.setDestinationInExternalFilesDir()或DownloadManager.Request.setDestinationInExternalPublicDir()?將下載位置設(shè)置為公共位置的舊版應(yīng)用仍可以訪問 COLUMN_LOCAL_FILENAME 中的路徑,但是我們強(qiáng)烈反對使用這種方法。對于由 DownloadManager 公開的文件,首選的訪問方式是使用ContentResolver.openFileDescriptor()?。
4. 在應(yīng)用件共享文件
對于面向 Android 7.0 的應(yīng)用,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開 file:// URI。如果一項(xiàng)包含文件 URI 的 intent 離開您的應(yīng)用,則應(yīng)用出現(xiàn)故障,并出現(xiàn) FileUriExposedException 異常。
要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項(xiàng) content:// URI,并授予 URI 臨時訪問權(quán)限。進(jìn)行此授權(quán)的最簡單方式是使用 FileProvider 類。
5. 屏幕縮放
Android 7.0 支持用戶設(shè)置顯示尺寸,以放大或縮小屏幕上的所有元素,從而提升設(shè)備對視力不佳用戶的可訪問性。用戶無法將屏幕縮放至低于最小屏幕寬度 sw320dp,該寬度是 Nexus 4 的寬度,也是常規(guī)中等大小手機(jī)的寬度。
當(dāng)設(shè)備密度發(fā)生更改時,系統(tǒng)會以如下方式通知正在運(yùn)行的應(yīng)用:
如果是面向 API 級別 23 或更低版本系統(tǒng)的應(yīng)用,系統(tǒng)會自動終止其所有后臺進(jìn)程。這意味著如果用戶切換離開此類應(yīng)用,轉(zhuǎn)而打開 Settings 屏幕并更改 Display size 設(shè)置,則系統(tǒng)會像處理內(nèi)存不足的情況一樣終止該應(yīng)用。如果應(yīng)用具有任何前臺進(jìn)程,則系統(tǒng)會如處理運(yùn)行時更改中所述將配置變更通知給這些進(jìn)程,就像對待設(shè)備屏幕方向變更一樣。
如果是面向 Android 7.0 的應(yīng)用,則其所有進(jìn)程(前臺和后臺)都會收到有關(guān)配置變更的通知,如處理運(yùn)行時更改中所述。
大多數(shù)應(yīng)用并不需要進(jìn)行任何更改即可支持此功能,不過前提是這些應(yīng)用遵循 Android 最佳做法。具體要檢查的事項(xiàng):
1.在屏幕寬度為 sw320dp 的設(shè)備上測試您的應(yīng)用,并確保其充分運(yùn)行。
2.當(dāng)設(shè)備配置發(fā)生變更時,更新任何與密度相關(guān)的緩存信息,例如緩存位圖或從網(wǎng)絡(luò)加載的資源。當(dāng)應(yīng)用從暫停狀態(tài)恢復(fù)運(yùn)行時,檢查配置變更。?
注:如果您要緩存與配置相關(guān)的數(shù)據(jù),則最好也包括相關(guān)元數(shù)據(jù),例如該數(shù)據(jù)對應(yīng)的屏幕尺寸或像素密度。保存這些元數(shù)據(jù)便于您在配置變更后決定是否需要刷新緩存數(shù)據(jù)。
3.避免用像素單位指定尺寸,因?yàn)橄袼夭粫S屏幕密度縮放。應(yīng)改為使用與密度無關(guān)像素 (dp) 單位指定尺寸。
6. 檢查你的應(yīng)用是否使用私有庫
為幫助您識別加載私有庫的問題,logcat 可能會生成一個警告或運(yùn)行時錯誤。例如,如果您的應(yīng)用面向 API 級別 23 或更低級別,并在運(yùn)行 Android 7.0 的設(shè)備上嘗試訪問私有庫,您可能會看到一個類似于下面所示的警告:
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 http://b/26394120
- 1
- 1
- 這些 logcat 警告通知您哪個庫正在嘗試訪問私有平臺 API,但不會導(dǎo)致您的應(yīng)用崩潰。但是,如果應(yīng)用面向 API 級別 24 或更高級別,logcat 會生成以下運(yùn)行時錯誤,您的應(yīng)用可能會崩潰:
-
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)
- 1
- 1
- 如果您的應(yīng)用使用動態(tài)鏈接到私有平臺 API 的第三方庫,您可能也會看到上述 logcat 輸出。利用 Android 7.0DK 中的 readelf 工具,您可以通過運(yùn)行以下命令生成給定 .so 文件的所有動態(tài)鏈接的共享庫列表:?
aarch64-linux-android-readelf -dW libMyLibrary.so7. 其他重要說明
⑴如果一個應(yīng)用在 Android 7.0 上運(yùn)行,但卻是針對更低 API 級別開發(fā)的,那么在用戶更改顯示尺寸時,系統(tǒng)將終止此應(yīng)用進(jìn)程。應(yīng)用必須能夠妥善處理此情景。否則,當(dāng)用戶從最近使用記錄中恢復(fù)運(yùn)行應(yīng)用時,應(yīng)用將會出現(xiàn)崩潰現(xiàn)象。
您應(yīng)測試應(yīng)用以確保不會發(fā)生此行為。要進(jìn)行此測試,您可以通過 DDMS 手動終止應(yīng)用,以造成相同的崩潰現(xiàn)象。
在密度發(fā)生更改時,系統(tǒng)不會自動終止面向 N 及更高版本的應(yīng)用;不過,這些應(yīng)用仍可能對配置變更做出不良響應(yīng)。
⑵Android 7.0 上的應(yīng)用應(yīng)能夠妥善處理配置變更,并且在后續(xù)啟動時不會出現(xiàn)崩潰現(xiàn)象。您可以通過更改字體大小 (Setting >Display > Font size) 并隨后從最近使用記錄中恢復(fù)運(yùn)行應(yīng)用,來驗(yàn)證應(yīng)用行為。
⑶由于之前的 Android 版本中的一項(xiàng)錯誤,系統(tǒng)未能將對主線程上的一個 TCP 套接字的寫入操作舉報為違反嚴(yán)格模式。Android 7.0 修復(fù)了此錯誤。呈現(xiàn)出這種行為的應(yīng)用現(xiàn)在會引發(fā)?android.os.NetworkOnMainThreadException?。一般情況下,我們不建議在主線程上執(zhí)行網(wǎng)絡(luò)操作,因?yàn)檫@些操作通常會出現(xiàn)可能導(dǎo)致 ANR 和卡頓的高尾延遲。
⑷Debug.startMethodTracing()?方法系列現(xiàn)在默認(rèn)在您的共享存儲空間上的軟件包特定目錄中存儲輸出,而非 SD 卡根目錄。這意味著應(yīng)用不再需要請求?WRITE_EXTERNAL_STORAGE?權(quán)限來使用這些 API 。
⑸許多平臺 API 現(xiàn)在開始檢查在 Binder 事務(wù)間發(fā)送的大負(fù)載,系統(tǒng)現(xiàn)在會將?TransactionTooLargeExceptions?作為 RuntimeExceptions 再次引發(fā),而不再只是默默記錄或抑制它們。一個常見例子是在?Activity.onSaveInstanceState()?上存儲過多數(shù)據(jù),導(dǎo)致ActivityThread.StopInfo?在您的應(yīng)用面向 Android 7.0 時引發(fā) RuntimeException。
⑹如果應(yīng)用向 View 發(fā)布 Runnable 任務(wù),并且 View 未附加到窗口,系統(tǒng)會用 View 為 Runnable 任務(wù)排隊(duì);在 View 附加到窗口之前,不會執(zhí)行 Runnable 任務(wù)。此行為會修復(fù)以下錯誤:
如果一項(xiàng)應(yīng)用是從并非預(yù)期窗口 UI 線程的其他線程發(fā)布到 View,則 Runnable 可能會因此運(yùn)行錯誤的線程。
如果 Runnable 任務(wù)是從并非環(huán)路線程的其他線程發(fā)布,則應(yīng)用可能會曝光 Runnable 任務(wù)。
⑺如果 Android 7.0 上一項(xiàng)有 DELETE_PACKAGES 權(quán)限的應(yīng)用嘗試刪除一個軟件包,但另一項(xiàng)應(yīng)用已經(jīng)安裝了這個軟件包,則系統(tǒng)需要用戶進(jìn)行確認(rèn)。在這種情況下,應(yīng)用在調(diào)用?PackageInstaller.uninstall()?時預(yù)計(jì)的返回狀態(tài)應(yīng)為?STATUS_PENDING_USER_ACTION?。
⑻名為 Crypto 的 JCA 提供程序已棄用,因?yàn)樗鼉H有的 SHA1PRNG 算法為弱加密。應(yīng)用無法再使用 SHA1PRNG(不安全地)派生密鑰,因?yàn)椴辉偬峁┐颂峁┏绦颉?/p>
?
?
Android 8.0二十大新特性,這些地方像極了iOS?
而值得一提的是,相信 iPhone 和 iPad 用戶應(yīng)該會對 Android 8.0中的一些新功能感到熟悉。此前,蘋果公司還經(jīng)常被指責(zé)抄襲Android功能。但是在Android 8.0中,谷歌也直接從iOS中移植了幾項(xiàng)功能。一起來看看吧~
?
通知功能
在Android 8.0“奧利奧”中,應(yīng)用圖標(biāo)的右上角有一個小點(diǎn),它代表未讀通知。
這是自第一代iPhone發(fā)布以來iOS中的一項(xiàng)主要功能。第三方Android系統(tǒng)定制廠商長期以來也一直在使用這項(xiàng)功能。
另外,用戶長按帶有通知標(biāo)記的應(yīng)用圖標(biāo),系統(tǒng)就會彈出菜單,提供應(yīng)用功能預(yù)覽,就像iOS中的3D Touch功能。
但不管怎么樣,對用戶來說是有利的。這種通知功能之所以能夠在多次iOS系統(tǒng)升級中得以保留,就是因?yàn)樗糜谩?/p>
新表情符號
Android 8.0和iOS 11都推出了新的表情符號,因?yàn)楸砬榉柺侨祟愇磥淼幕臃绞健9雀铻锳ndroid 8.0徹底重新設(shè)計(jì)了表情符號,棄用了Blobs表情包,重新使用傳統(tǒng)圓形表情符號。
不過,根據(jù)蘋果CEO蒂姆·庫克(Tim Cook)預(yù)覽的表情符號,iOS將會增加更為精細(xì)的表情符號。庫克在推文中展示了十分精細(xì)的表情符號。蘋果尚未披露這些新表情符號會在何時登陸iOS,但預(yù)計(jì)會在iOS 11和macOS High Sierra系統(tǒng)發(fā)布時出現(xiàn)。
智能復(fù)制和粘貼
從首版Android系統(tǒng)發(fā)布以來,Android就一直支持復(fù)制和粘貼功能,常常在用戶互動功能部署上iOS。這是一項(xiàng)重要功能,但是由于手機(jī)屏幕較小,復(fù)制和粘貼并不方便。Android 8.0讓文本的復(fù)制和粘貼變得更加容易。
這項(xiàng)功能名為“智能文本選擇”。例如,當(dāng)用戶選擇一個地址時,地圖鏈接就會出現(xiàn)在復(fù)制、剪切、粘貼標(biāo)準(zhǔn)功能的旁邊。如果用戶選擇的一組數(shù)字看起來很像電話號碼,那么手機(jī)應(yīng)用就會出現(xiàn)。
這有些像iOS中的數(shù)據(jù)探測器,但是谷歌的功能看起來更為全面,它使用的是谷歌智能識別人工智能技術(shù)。
畫中畫功能
蘋果通過iOS 9在iPad中增加了畫中畫功能。現(xiàn)在,Android也具備了這項(xiàng)功能。而且,在Android 8.0中,手機(jī)也能實(shí)現(xiàn)畫中畫功能,這正是iPhone所缺少的。
Android 8.0的畫中畫模式與預(yù)期的一樣。它能夠允許用戶把視頻最小化,懸浮在屏幕上方。同時,其它任務(wù)在視頻下方運(yùn)行。用戶可以調(diào)整視頻窗口的位置。
目前,iOS的畫中畫功能只限于iPad,但未來可能會發(fā)生變化。
自動填充功能
Android 8.0終于支持自動填充功能。Android應(yīng)用現(xiàn)在可以自動填充用戶姓名、密碼和地址等用戶信息。密碼管理應(yīng)用很早就已經(jīng)支持了這項(xiàng)功能,但是需要通過復(fù)雜的方法來實(shí)現(xiàn)。現(xiàn)在,應(yīng)用可以執(zhí)行自動填充應(yīng)用程序接口(API),因此可以實(shí)現(xiàn)更為流暢地整合。
iOS也有類似功能,但是主要局限在少量應(yīng)用上,例如亞馬遜公司應(yīng)用,不像Safari上的自動填充功能一樣無處不在。
雖然這次新版本很多地方跟 iOS 相似,但對于用戶寶寶來說,是福利有木有,還是來一起看看 Android 8.0 帶來的20個新變化匯總吧~
Android 8.0 新變化匯總
1、Android 8.0 大幅提升了開機(jī)速度
對 Pixel 而言,開機(jī)速度提升了一倍,和旗艦機(jī)型三星 Galaxy S8 對比,嗯,看看開心就好。
2、鎖屏界面變化很小,字號縮小了一圈,為鎖屏壁紙和通知等內(nèi)容留出更多視覺空間
不過,在動輒 0.1、0.2 秒解鎖的指紋識別普及后,鎖屏界面已不那么重要了。
3、桌面更新體現(xiàn)在「可自定義圖標(biāo)的形狀」上
在 Pixel 桌面,你可以為圖標(biāo)選擇圓形、方形或者圓角矩形等樣式。另一個細(xì)節(jié)是,以前在 Google Play 市場設(shè)置的「將新應(yīng)用圖標(biāo)添加到桌面」選項(xiàng),如今需要在 Pixel 桌面中設(shè)置。
五種桌面圖標(biāo)形狀
4、引入了「通知圓點(diǎn)」功能,但不會顯示具體通知數(shù)量,只會在圖標(biāo)右上角顯示一個圓點(diǎn)
這兒有個細(xì)節(jié),這個出現(xiàn)在右上角的圓點(diǎn),會從圖標(biāo)左下角提取顏色,所以每個 APP 的圓點(diǎn)都是不一樣的顏色。
5、長按圖標(biāo),能看到圖標(biāo)菜單和通知概覽
長按即可。目前最實(shí)用的,是支付寶的快捷付款功能。
6、全新的狀態(tài)欄
底色從之前的黑色,到第一個開發(fā)者預(yù)覽版時的黑白任選,再到正式版的只剩下白色,看起來清爽不少,動畫也更優(yōu)雅。
7、通知欄變得更加可愛
系統(tǒng)只默認(rèn)完整顯示最頂部的通知,其余通知被壓縮,可以用手勢下拉查看全部內(nèi)容。還有就是, Google Play Music 和 YouTuBe 的通知,會根據(jù)內(nèi)容或?qū)]嫹饷嬖鎏硗ㄖ省?/p>
8、在展開或縮起所有通知時,最左邊的小圖標(biāo)會有可愛的動畫出現(xiàn)
↑留意通知欄左下角↑
9、設(shè)置界面相對與 Android 7.1.2 引入了層級概念
將不常用設(shè)置項(xiàng)歸納到一起,保持整體的簡潔,但也增加了尋找的難度。
設(shè)置界面
10、系統(tǒng)應(yīng)用的默認(rèn)圖標(biāo)統(tǒng)一更新為綠色圓形
這個圖標(biāo)除了系統(tǒng)應(yīng)用外,一些懶得畫圖標(biāo)的第三方應(yīng)用也可以直接用上,呵呵,這些開發(fā)者是有多懶。
11、安全性選項(xiàng)中,Android 8.0 引入了「Google Play 保護(hù)機(jī)制」
它會定期檢查手機(jī)所安裝的應(yīng)用是否存在有害行為,如果發(fā)現(xiàn)安全風(fēng)險,系統(tǒng)會通知用戶。
12、每個 APP 的「安裝未知應(yīng)用」功能將默認(rèn)被限制
比如在 Chrome 瀏覽器上下載一個 apk 安裝包,如果未經(jīng)允許,這個安裝包是無法安裝的。安裝應(yīng)用的過程中有明確進(jìn)度條可以查看。
13、終于可以直接在鈴聲設(shè)置界面添加第三方手機(jī)鈴聲
不用將喜歡的鈴聲放進(jìn) ringtones 文件夾了。
接下來要說的兩個功能,幾乎是到了最后的第四個開發(fā)者預(yù)覽版才能夠正常使用。
14、畫中畫模式
使用 Chrome 全屏播放視頻或者在 YouTuBe 觀看視頻時,按下 Home 鍵就可以進(jìn)入畫中畫模式。
15、Autofill 功能
能夠通過你存儲在谷歌帳號上的帳號密碼,自動在登錄應(yīng)用時填充。
16、在 Android 8.0 的開發(fā)者選項(xiàng)中,還出現(xiàn)了藍(lán)牙音頻解碼器加
入了由索尼提供的 LDAC 無線音效技術(shù),索尼藍(lán)牙耳機(jī)用戶有福了。另外,像 aptX 和 aptX HD等無線技術(shù)也有提供。
在沒有開啟開發(fā)者選項(xiàng)的情況下,系統(tǒng)會自動幫你做出選擇,比如在連接索尼藍(lán)牙耳機(jī)后,會自動切換到 LDAC 模式,而連接三星藍(lán)牙耳機(jī)時,會切換回 aptX。
17、智能文本選擇
舉個例子,在郵件中選擇一個帶地址的文本,系統(tǒng)除了彈出復(fù)制和全選之外,還會直接提供谷歌地圖的快捷方式,讓用戶直接在地圖中查看這個地址。
18、Pixel 自帶相機(jī)中增加了雙擊放大功能
這功能可能是為雙攝兩倍變焦做準(zhǔn)備的。
19、Emoji 表情也從之前的果凍變成了圓形
個人感覺是沒之前的可愛。
20、 Android 8.0 正式版的彩蛋跟第四個開發(fā)者預(yù)覽版沒有區(qū)別,就是一只章魚
然后你可以按住它的頭劃來劃去,沒什么特別。
好了,關(guān)于 Android 8.0 的主要新特性就介紹到這里,當(dāng)然,還有一些特別細(xì)節(jié)的內(nèi)容這里就不一一展開細(xì)說,你覺得 8.0 中更新的哪些功能是你喜歡的呢?
Google 表示,Android 8.0 正式版將在最快速度推送到 Pixel 和 Nexus 設(shè)備,首批吃奧利奧的設(shè)備包括 Pixel、Pixel XL、Pixel C、 Nexus 6P、Nexus 5X 以及 Nexus Player。
總結(jié)
以上是生活随笔為你收集整理的Android5.0,6.0,7.0,8.0新特性整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: timertask
- 下一篇: Android三级缓存机制工具类的实现