Android各版本的行為變更

本文的主要內(nèi)容來(lái)自官方,摘出了Android開(kāi)發(fā)者應(yīng)該關(guān)注的重點(diǎn)變更,目前已經(jīng)更新到Android 11,新版本發(fā)布時(shí)會(huì)持續(xù)更新,如果對(duì)您有幫助請(qǐng)不吝點(diǎn)贊!

一、Android 5.0——21——Lollipop(棒棒糖)

  1. ART

  2. 限制獲取AppTask

  3. WebView默認(rèn)阻止第三方內(nèi)容:setMixedContentMode()

  4. Material Design

  5. 提出JobScheduler

  6. 屏幕采集和屏幕共享

    Android 5.0 引入了新的 android.media.projection API,讓您可以為應(yīng)用添加屏幕采集和屏幕共享功能。例如,如果您想在視頻會(huì)議應(yīng)用中啟用屏幕共享,便可使用此功能。
    
    新增的 createVirtualDisplay() 方法允許您的應(yīng)用將主屏幕(默認(rèn)顯示)的內(nèi)容采集到一個(gè) Surface 對(duì)象中,然后您的應(yīng)用便可將其發(fā)送至整個(gè)網(wǎng)絡(luò)。該 API 只允許采集非安全屏幕內(nèi)容,不允許采集系統(tǒng)音頻。要開(kāi)始采集屏幕,您的應(yīng)用必須先使用通過(guò) createScreenCaptureIntent() 方法獲得的 Intent 啟動(dòng)屏幕采集對(duì)話框,請(qǐng)求用戶授予權(quán)限。
    

二、Android 6.0——23——Marshmallow(棉花糖)

  1. 省電機(jī)制Doze引入
  2. 運(yùn)行時(shí)權(quán)限
  3. 移除了對(duì)設(shè)備本地硬件標(biāo)識(shí)符的編程訪問(wèn)權(quán)
  4. 指紋API

三、Android 7.0——24——Nougat(牛軋?zhí)牵?/p>

  1. FileProvider
  2. 低耗電模式進(jìn)一步優(yōu)化
  3. 多窗口支持
  4. 添加JIT,屬于對(duì)AOT的一種補(bǔ)充機(jī)制
  5. 引入V2簽名

四、Android 8.0——26——Oreo(奧利奧)

  1. 當(dāng)您的應(yīng)用進(jìn)入已緩存狀態(tài)時(shí),如果沒(méi)有活動(dòng)的組件,系統(tǒng)將解除應(yīng)用具有的所有喚醒鎖。

  2. 應(yīng)用無(wú)法使用其清單注冊(cè)大部分隱式廣播

  3. 應(yīng)用嘗試在不允許其創(chuàng)建后臺(tái)服務(wù)的情況下使用 startService() 函數(shù),則該函數(shù)將引發(fā)一個(gè) IllegalStateException

  4. 后臺(tái)應(yīng)用時(shí),降低了后臺(tái)應(yīng)用接收位置更新的頻率

  5. 畫(huà)中畫(huà)模式

  6. 應(yīng)用快捷菜單

  7. 音頻自動(dòng)閃避,失去焦點(diǎn)時(shí)自動(dòng)調(diào)小音量

  8. 多顯示器支持(移動(dòng)Activity到另一個(gè)窗口會(huì)onConfigChange)

    在多窗口模式下,在任意時(shí)間點(diǎn)都只有用戶最近一次互動(dòng)的 Activity 處于活動(dòng)狀態(tài)。此 Activity 被視為最頂層的 Activity,而且是唯一處于 RESUMED 狀態(tài)的 Activity。所有其他可見(jiàn)的 Activity 均處于 STARTED 而非 RESUMED 狀態(tài)。不過(guò),這些可見(jiàn)但并不處于 RESUMED 狀態(tài)的 Activity 在系統(tǒng)中享有比不可見(jiàn) Activity 更高的優(yōu)先級(jí)。如果用戶與其中一個(gè)可見(jiàn)的 Activity 互動(dòng),那么該 Activity 將進(jìn)入 RESUMED 狀態(tài),而之前的最頂層 Activity 將進(jìn)入 STARTED 狀態(tài)。
    
  9. 通知欄細(xì)化,加入渠道概念

五、Android 9.0——28——Pie

  1. 后臺(tái)應(yīng)用無(wú)法訪問(wèn)用戶輸入和一些傳感器數(shù)據(jù),如麥克風(fēng)相機(jī),加速器陀螺儀等,除非使用前臺(tái)服務(wù)
  2. 通話記錄權(quán)限從Phone組移動(dòng)到CALL_LOG組,plus,一個(gè)組的權(quán)限有了一個(gè),其他的的權(quán)限也就有了(申請(qǐng)會(huì)自動(dòng)授權(quán))
  3. 不允許使用非SDKAPI,也就是hide的一些SDK方法不許用反射和JNI調(diào)用
  4. 支持檢測(cè)顯示屏缺口,非功能區(qū)域DisplayCutout,比如檢測(cè)挖孔屏
  5. 利用 Wi-Fi RTT 進(jìn)行室內(nèi)定位
  6. ImageDecoder類可取代BitmapFactory
  7. 簽名方案v3

六、Android 10——29——Q

  1. 屏幕邊緣手勢(shì)導(dǎo)航(各大廠商早就實(shí)現(xiàn)了)

  2. 分區(qū)儲(chǔ)存

    為了讓用戶更好地管理自己的文件并減少混亂,以 Android 10(API 級(jí)別 29)及更高版本為目標(biāo)平臺(tái)的應(yīng)用在默認(rèn)情況下被賦予了對(duì)外部存儲(chǔ)空間的分區(qū)訪問(wèn)權(quán)限(即分區(qū)存儲(chǔ))。此類應(yīng)用只能訪問(wèn)外部存儲(chǔ)空間上的應(yīng)用專屬目錄,以及本應(yīng)用所創(chuàng)建的特定類型的媒體文件。
    
    注意:如果您的應(yīng)用在運(yùn)行時(shí)請(qǐng)求與存儲(chǔ)空間相關(guān)的權(quán)限,面向用戶的對(duì)話框會(huì)表明您的應(yīng)用正在請(qǐng)求對(duì)外部存儲(chǔ)空間的廣泛訪問(wèn),即使已啟用分區(qū)存儲(chǔ)也是如此。
    
  3. 后臺(tái)應(yīng)用不能啟動(dòng)一個(gè)新的Activity

  4. 新增后臺(tái)訪問(wèn)位置信息權(quán)限,無(wú)則不可以(ACCESS_BACKGROUND_LOCATION)

  5. 應(yīng)用必須具有 READ_PRIVILEGED_PHONE_STATE 特許權(quán)限才能訪問(wèn)設(shè)備的不可重置標(biāo)識(shí)符(包含 IMEI 和序列號(hào)),普通應(yīng)用基本是不可以的

  6. 除非您的應(yīng)用是默認(rèn)輸入法 (IME) 或是目前處于焦點(diǎn)的應(yīng)用,否則它無(wú)法訪問(wèn) Android 10 或更高版本平臺(tái)上的剪貼板數(shù)據(jù)。

七、Android 11——30——R

  1. 單次授權(quán)(權(quán)限只給這一次)

  2. 自動(dòng)重置權(quán)限——幾個(gè)月用戶未與應(yīng)用交互,將回收應(yīng)用權(quán)限

  3. 支持瀑布屏API

    現(xiàn)有的 DisplayCutout.getSafeInset…() 方法現(xiàn)在會(huì)返回能夠避開(kāi)瀑布區(qū)域以及劉海的安全邊襯區(qū)
    
  4. 新增前臺(tái)服務(wù)類型屬性,必須指明為camera和microphone才能訪問(wèn)麥克風(fēng),在后臺(tái)運(yùn)行時(shí)啟動(dòng)的前臺(tái)服務(wù)無(wú)法訪問(wèn)麥克風(fēng)和相機(jī),除非具備后臺(tái)訪問(wèn)權(quán)限

    <manifest>
        ...
        <service ... android:foregroundServiceType="location|camera" />
    </manifest>
    
  5. 軟件包可見(jiàn)性——不是所有應(yīng)用都對(duì)軟件可見(jiàn)了

    1.影響queryIntentActivities()的返回結(jié)果
    2.影響啟動(dòng)其他應(yīng)用的Service
    3.不影響啟動(dòng)Activity
    4.別的應(yīng)用和你發(fā)生交互,那它對(duì)你是可見(jiàn)的
    5.系統(tǒng)的一些支持程序是可見(jiàn)的
    6.ContentProvider是可見(jiàn)的,如果你具備權(quán)限的話
    7.用<queries>聲明想要可見(jiàn)的一些應(yīng)用
    
  1. 應(yīng)用退出原因

    Android 11 引入了 ActivityManager.getHistoricalProcessExitReasons() 方法,用于報(bào)告近期任何進(jìn)程終止的原因。應(yīng)用可以使用此方法收集崩潰診斷信息,例如進(jìn)程終止是由于 ANR、內(nèi)存問(wèn)題還是其他原因所致。此外,您還可以使用新的 setProcessStateSummary() 方法存儲(chǔ)自定義狀態(tài)信息,以便日后進(jìn)行分析。
    
  2. 資源加載器ResourcesLoader——可用做換膚和插件化

    Android 11 引入了一個(gè)新 API,允許應(yīng)用動(dòng)態(tài)擴(kuò)展資源的搜索和加載方式。新的 API 類 ResourcesLoader 和 ResourcesProvider 主要負(fù)責(zé)提供新功能。兩者協(xié)同作用,可以提供額外的資源,或修改現(xiàn)有資源的值。
    
    ResourcesLoader 對(duì)象是向應(yīng)用的 Resources 實(shí)例提供 ResourcesProvider 對(duì)象的容器,而 ResourcesProvider 對(duì)象提供從 APK 和資源表加載資源數(shù)據(jù)的方法。
    
    此 API 的一個(gè)主要用例是自定義資源加載。您可以使用 loadFromDirectory() 創(chuàng)建一個(gè) ResourcesProvider,用于重定向基于文件的資源的解析,從而讓其搜索特定目錄,而不是應(yīng)用 APK。您可以通過(guò) AssetManager API 類中的 open() 系列方法訪問(wèn)這些資源,就像訪問(wèn) APK 中綁定的資源一樣。
    
最后編輯于
?著作權(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)容