Android5.0/6.0/7.0/8.0各個(gè)版本Api重要變更

Android5.0(api等級(jí):21)

1.運(yùn)行環(huán)境的改變

Android5.0之前運(yùn)行的環(huán)境是dalvik虛擬機(jī),5.0之后運(yùn)行的環(huán)境是ART虛擬機(jī)。ART主要包括一下功能:

預(yù)先 (AOT) 編譯

經(jīng)過(guò)改進(jìn)的垃圾回收 (GC)

經(jīng)過(guò)改進(jìn)的調(diào)試支持

大多數(shù) Android 應(yīng)用應(yīng)該不用做出任何更改即可直接在 ART 下運(yùn)行。不過(guò),Dalvik 上運(yùn)行的部分技術(shù)在 ART 上無(wú)法運(yùn)行。

請(qǐng)注意以下問(wèn)題:

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

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

您使用的技術(shù)與垃圾回收壓縮不兼容。(雖然 ART 當(dāng)前沒(méi)有實(shí)施垃圾回收壓縮,但在 Android 開(kāi)放源代碼項(xiàng)目中,垃圾回收壓縮正處于開(kāi)發(fā)階段)。

2.Material Design 設(shè)計(jì)樣式

RecyclerView/Cordinartlayout/Collingsplayout/Toolbar之類(lèi)的UI控件的提供,主要是優(yōu)化AndroidUI界面,形成自己獨(dú)有的風(fēng)格。

通知/聲音/震動(dòng)......提高用戶體驗(yàn)

3.顯卡

支持OpenGL ES3.1 添加了 Java 接口和原生支持。OpenGL ES 3.1 中提供的主要新功能包括:

對(duì)著色器進(jìn)行計(jì)算

單獨(dú)的著色器對(duì)象

間接繪圖命令

多樣本和模版紋理

對(duì)著色語(yǔ)言的改進(jìn)

用于高級(jí)混合模式和調(diào)試的擴(kuò)展

對(duì) OpenGL ES 2.0 和 3.0 的向后兼容性

4.媒體

用于高級(jí)攝像頭功能的攝像頭 API

音頻播放

媒體播放控件

5.Project Volta

android 5.0 提供了一個(gè)新的JobSchedulerAPI,它允許您通過(guò)為系統(tǒng)定義要在以后的某個(gè)時(shí)間或在指定的條件下(例如,當(dāng)設(shè)備在充電時(shí))異步運(yùn)行的作業(yè)來(lái)優(yōu)化電池壽命。

節(jié)省電量

Android6.0(api23)

1.權(quán)限管理

Android權(quán)限分類(lèi):

普通權(quán)限(Normal permissions)


危險(xiǎn)權(quán)限(Dangerous permissions)權(quán)限組

系統(tǒng)和簽名權(quán)限(signatureOrSystem)

   必須把App放到System/App就有此權(quán)限或者用系統(tǒng)簽名簽名

簽名權(quán)限(signature)必須要有系統(tǒng)級(jí)別的簽名才能夠獲取到

2.Doze & App Standby

Doze 的原理是通過(guò)對(duì)各種傳感器的監(jiān)控, 來(lái)判斷機(jī)器是否處于使用狀態(tài)。? 當(dāng) Doze 認(rèn)為機(jī)器長(zhǎng)時(shí)間處于待機(jī)狀態(tài)的時(shí)候, 它會(huì)自動(dòng)暫停絕大部分后臺(tái)應(yīng)用, 同時(shí)關(guān)閉網(wǎng)絡(luò)連接, 僅在需要時(shí)偶爾連接, 如此來(lái)達(dá)到在待機(jī)時(shí)節(jié)省電量的效果。

需要注意的是, 能足以激活 Doze 的待機(jī)時(shí)長(zhǎng)真的很長(zhǎng), 基本上可能你一上午完完全全不碰手機(jī), Doze 才會(huì)被激活。? 不過(guò)這樣倒是也為那些晚上不愛(ài)插充電器, 也不愿意關(guān)機(jī)的人們提供了一種節(jié)電的新方式。

另一個(gè)功能 App Standby, 指的是系統(tǒng)會(huì)自動(dòng)停用那些許久不用的應(yīng)用, 從而達(dá)到節(jié)省電量和減少后臺(tái)占用的作用。

3.分屏操作

4.移除 Apache HTTP 客戶端

Android 6.0 發(fā)布版移除了對(duì) Apache HTTP 客戶端的支持。如果你的應(yīng)用程序使用該客戶端,并且目標(biāo)運(yùn)行版本為 Android 2.3 (API 級(jí)別9) 及以上,需要使用 HttpURLConnection 類(lèi)來(lái)代替。這個(gè) API 更加的高效,因?yàn)樗ㄟ^(guò)對(duì)用戶透明的壓縮、響應(yīng)緩存來(lái)減少網(wǎng)絡(luò)開(kāi)銷(xiāo),并最小化電量消耗。要繼續(xù)使用 Apache HTTP 的 API,你需要引入org.apache.http.legacy.jar(android{ useLibrary'org.apache.http.legacy'})

Android7.0(api24)

1.移除三個(gè)隱式廣播(網(wǎng)絡(luò)變化/拍照后的廣播/錄制視頻后的廣播)

Android 7.0 移除了三項(xiàng)隱式廣播,以幫助優(yōu)化內(nèi)存使用和電量消耗。此項(xiàng)變更很有必要,因?yàn)殡[式廣播會(huì)在后臺(tái)頻繁啟動(dòng)已注冊(cè)偵聽(tīng)這些廣播的應(yīng)用。刪除這些廣播可以顯著提升設(shè)備性能和用戶體驗(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)用戶使用相機(jī)應(yīng)用拍攝照片時(shí),這些應(yīng)用即會(huì)被喚醒以處理廣播。

主要目的還是電池電量的優(yōu)化

使用jobScheduler代替

2.安全

更安全的加密模式,可以對(duì)單獨(dú)的文件進(jìn)行加密,android系統(tǒng)啟動(dòng)加密

3.支持vr

Android N上對(duì)VR的支持,實(shí)際上是使用了一個(gè)新的跨平臺(tái)圖形計(jì)算庫(kù)——Vulkan,Vlukan API提升處理能力,減少GPU處理,從而獲得更佳的游戲體驗(yàn),所以說(shuō),如果一個(gè)手機(jī)支持VR,那么從某種意義上來(lái)說(shuō),這個(gè)手機(jī)的性能應(yīng)該是很贊的!

4.引入全新的JIT編譯器,使得App安裝速度快了75%,編譯代碼的規(guī)模減少了50%

Android8.0(api26)

1.所有的隱式廣播都被移除了。

1. 1確定哪些 Broadcast 是隱式(Implict)的

根據(jù)官方文檔,所有沒(méi)有直接和你應(yīng)用相關(guān)的廣播都是隱式的。比如文檔中舉例的ACTION_PACKAGE_REPLACED,會(huì)在每個(gè)新應(yīng)用安裝時(shí)被廣播。因此,像ACTION_MY_PACKAGE_REPLACED這樣的就是顯式廣播(explicit Broadcast),因?yàn)槠渲粫?huì)在你的應(yīng)用更新時(shí)才會(huì)進(jìn)行廣播。

絕大多數(shù)我們監(jiān)聽(tīng)的廣播都是隱式的。

1.2.確定你的應(yīng)用是否會(huì)被影響

這里列出的是沒(méi)有被移除的隱式廣播,也就是如果你的應(yīng)用只是監(jiān)聽(tīng)了這些廣播的話,那么恭喜你,你的應(yīng)用不需要改。

1.3.如果應(yīng)用確實(shí)監(jiān)聽(tīng)了這些被移除的隱式廣播,JobScheduler來(lái)解救你

JobScheduler 完美適配 Doze 和 App Standby,可以根據(jù)定義的條件來(lái)執(zhí)行任務(wù),比如:

ComponentNamemyService=newComponentName(this,MyService.class);JobInfomyJob=newJobInfo.Builder(myService).setRequiresCharging(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY).setPersisted(true).build();JobSchedulerjobScheduler=(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE);jobScheduler.schedule(myJob);

不過(guò),JobSchedular 只支持 Android API 21 及以上,如果你的應(yīng)用需要支持以下版本的系統(tǒng),官方建議可以使用FirebaseJobDispatcher

這里推薦可以用 Evernote 的Android-Job。其能夠根據(jù)當(dāng)前系統(tǒng),當(dāng)系統(tǒng)為 Marshmallow 及以上時(shí)使用 JobSchedular。當(dāng)版本沒(méi)達(dá)到時(shí),根據(jù)是否集成了 Google Play Service 來(lái)使用 GCMNetworkManager 或 AlarmManager。

1.4.Fonts in XML

支持自定義字體,在res目錄下可以創(chuàng)建font文件夾,文件夾必須為font,文件類(lèi)型必須是font,然后拷貝進(jìn)去對(duì)應(yīng)的.ttf/.otf就可以

Creating a font family

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,461評(píng)論 25 708
  • Android 7.0 新特性(源自官方文檔) Android 7.0(API 級(jí)別 24) 除了提供諸多新特性和...
    karlsu閱讀 4,957評(píng)論 0 3
  • 行走、孤獨(dú)卻無(wú)需叫喊其他人。一個(gè)人吃飯 、一個(gè)人購(gòu)物、一個(gè)人行走,穿梭于城市的各個(gè)街道,心事如同少女裙擺上...
    超強(qiáng)大無(wú)敵李姣陽(yáng)閱讀 276評(píng)論 0 1
  • 沒(méi)有一個(gè)開(kāi)始 連做夢(mèng) 都會(huì)被恥笑 《潮騷~蔡振源》
    蔡振源閱讀 316評(píng)論 0 1