Android從5.0到9.0版本的主要變更

Android5.0

1.虛擬機(jī)

Android 5.0 中,全面由Dalvik轉(zhuǎn)用ART(Android Runtime)編譯。大大提高了性能。

  • 預(yù)先 (AOT) 編譯
  • 改進(jìn)的垃圾回收 (GC)
  • 改進(jìn)的調(diào)試支持

2.Material Design 樣式

采用全新Material Design設(shè)計(jì),頁(yè)面更加的美觀,立體。

3.浮動(dòng)通知

設(shè)備未鎖定且其屏幕處于打開(kāi)狀態(tài),通知可以顯示在小型浮動(dòng)窗口中,稱(chēng)為浮動(dòng)通知

4.綁定服務(wù)

啟動(dòng)或綁定服務(wù)必須顯式啟動(dòng),如果隱式啟動(dòng),會(huì)引發(fā)下列異常:

 Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit

如果非要隱式啟動(dòng),可以使用下列方案來(lái)避免異常:

val intent = Intent("Service對(duì)應(yīng)的Action")
intent.`package` = packageName
bindService(intent,mServiceConnection,BIND_AUTO_CREATE)

Android6.0

1.運(yùn)行時(shí)權(quán)限

用戶可直接在運(yùn)行時(shí)管理應(yīng)用權(quán)限。這種模式讓用戶能夠更好地了解和控制權(quán)限,同時(shí)為應(yīng)用開(kāi)發(fā)者精簡(jiǎn)了安裝和自動(dòng)更新過(guò)程。用戶可為所安裝的各個(gè)應(yīng)用分別授予撤銷(xiāo)權(quán)限。

//檢測(cè)某個(gè)權(quán)限是否已經(jīng)被授予 
//PackageManager.PERMISSION_GRANTE:獲得權(quán)限
//PackageManager.PERMISSION_DENIED:為獲得權(quán)限
ContextCompat.checkSelfPermission(Context context,String permission)
//申請(qǐng)權(quán)限
ActivityCompat.requestPermissions(Activity activity,String[] permissions, int requestCode)
//處理授權(quán)
onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
//解釋說(shuō)明權(quán)限的用途
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity,String permission)

2.低電耗模式和應(yīng)用待機(jī)模式

  • 低電耗模式:如果用戶拔下設(shè)備的電源插頭,并在屏幕關(guān)閉后的一段時(shí)間內(nèi)使其保持不活動(dòng)狀態(tài),設(shè)備會(huì)進(jìn)入低電耗模式。 在該模式下設(shè)備會(huì)嘗試讓系統(tǒng)保持休眠狀態(tài)。在該模式下,設(shè)備會(huì)定期短時(shí)間恢復(fù)正常工作,以便進(jìn)行應(yīng)用同步,還可讓系統(tǒng)執(zhí)行任何掛起的操作

  • 應(yīng)用待機(jī)模式:應(yīng)用待機(jī)模式允許系統(tǒng)判定應(yīng)用在用戶未主動(dòng)使用它時(shí)處于空閑狀態(tài)。當(dāng)用戶有一段時(shí)間未觸摸應(yīng)用時(shí),系統(tǒng)便會(huì)作出此判定。如果拔下了設(shè)備電源插頭,系統(tǒng)會(huì)為其視為空閑的應(yīng)用停用網(wǎng)絡(luò)訪問(wèn)以及暫停同步和作業(yè)

在低電耗模式下,您的應(yīng)用會(huì)受到以下限制:

  • 暫停訪問(wèn)網(wǎng)絡(luò)
  • 系統(tǒng)忽略喚醒鎖定
  • 標(biāo)準(zhǔn)AlarmManager鬧鐘推遲到下一個(gè)維護(hù)期
  • 系統(tǒng)不執(zhí)行WLAN掃描
  • 系統(tǒng)不允許運(yùn)行同步適配器SyncAdapter
  • 系統(tǒng)不允許運(yùn)行JobScheduler

3.取消支持 Apache HTTP

Android 6.0版移除了對(duì) Apache HTTP 的支持,推薦使用HttpURLConnection,因?yàn)樗梢酝ㄟ^(guò)透明壓縮和響應(yīng)緩存減少網(wǎng)絡(luò)使用,并可最大限度降低耗電量。
如果想繼續(xù)使用Apache HTTP,必須先在build.gradle文件中如下聲明:

android {
    useLibrary 'org.apache.http.legacy'
}

Android7.0

1.文件訪問(wèn)權(quán)限

為了提高私有文件的安全性,應(yīng)用私有目錄被限制訪問(wèn),此設(shè)置可防止私有文件的元數(shù)據(jù)泄漏,如它們的大小或存在性。

  • 無(wú)法使用file://這樣的形式訪問(wèn)文件,不然會(huì)報(bào)錯(cuò)FileUriExposedException,現(xiàn)在改用FileProvide來(lái)訪問(wèn)文件。
<manifest>
    ...
    <application>
        ...
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.mydomain.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
           <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        ...
    </application>
</manifest>

file_paths.xml文件內(nèi)容:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <paths>
        <files-path path="files" name="files" />
        <cache-path path="files" name="cache" /> 
        ...
    </paths>
</resources>
  • path:文件夾“相對(duì)路徑”
  • name:名稱(chēng)標(biāo)志字符,不能重名。
標(biāo)簽 路徑
files-path getFilesDir()
cache-path getCacheDir()
external-path Environment.getExternalStorageDirectory()
external-files-path getExternalFilesDir()
external-cache-path getExternalCacheDir()
external-media-path getExternalMediaDirs()
root-path /

<files-path path="image" name="files" />:對(duì)應(yīng)的文件路徑為:getFilesDir() / image/

  • DownloadManager不再按文件名分享私人存儲(chǔ)的文件。

2.移除三項(xiàng)隱式廣播

  • CONNECTIVITY_ACTION:網(wǎng)絡(luò)狀態(tài)監(jiān)聽(tīng)。
  • ACTION_NEW_PICTURE:拍照廣播
  • ACTION_NEW_VIDEO:錄視頻廣播

注意:移除的是隱式廣播。正在前臺(tái)運(yùn)行的應(yīng)用程序如果在主線程中動(dòng)態(tài)注冊(cè)了該廣播,該應(yīng)用程序仍然可以接收到該廣播。

3.進(jìn)一步優(yōu)化低電耗模式

Android 6.0引入了低電耗模式,當(dāng)用戶設(shè)備未插接電源、處于靜止?fàn)顟B(tài)且屏幕關(guān)閉時(shí),該模式會(huì)推遲 CPU和網(wǎng)絡(luò)活動(dòng),從而延長(zhǎng)電池壽命。而Android 7.0則通過(guò)在設(shè)備未插接電源且屏幕關(guān)閉狀態(tài)下、但不一定要處于靜止?fàn)顟B(tài)(例如用戶外出時(shí)把手持式設(shè)備裝在口袋里)時(shí)應(yīng)用部分CPU和網(wǎng)絡(luò)限制,進(jìn)一步增強(qiáng)了低電耗模式

Android8.0

1.后臺(tái)執(zhí)行限制

  • 在后臺(tái)運(yùn)行的應(yīng)用對(duì)后臺(tái)服務(wù)的訪問(wèn)受到限制。
  • 應(yīng)用無(wú)法使用其清單注冊(cè)大部分隱式廣播

如果在后臺(tái)服務(wù)中調(diào)用startService(),則會(huì)拋出IllegalStateException。 調(diào)用Context.startForegroundService()將啟動(dòng)一個(gè)前臺(tái)服務(wù)。即使應(yīng)用在后臺(tái)運(yùn)行,系統(tǒng)也允許其調(diào)用 Context.startForegroundService()。不過(guò),應(yīng)用必須在創(chuàng)建服務(wù)后的五秒內(nèi)調(diào)用該服務(wù)的startForeground()

2.后臺(tái)位置限制

為節(jié)約電池電量、保持良好的用戶體驗(yàn)和確保系統(tǒng)健康運(yùn)行,在運(yùn)行Android 8.0的設(shè)備上使用后臺(tái)應(yīng)用時(shí),降低了后臺(tái)應(yīng)用接收位置更新的頻率。此行為變更會(huì)影響包括Google Play服務(wù)在內(nèi)的所有接收位置更新的應(yīng)用。
影響的API:

  • Fused Location Provider (FLP)
  • Geofencing
  • GNSS Measurements
  • Location Manager
  • Wi-Fi Manager

3.通知


Android 8.0中,我們已重新設(shè)計(jì)通知,以便為管理通知行為和設(shè)置提供更輕松和更統(tǒng)一的方式。這些變更包括以下內(nèi)容:

  • 通知渠道Android 8.0引入了通知渠道,其允許您為要顯示的每種通知類(lèi)型創(chuàng)建用戶可自定義的渠道。用戶界面將通知渠道稱(chēng)之為通知類(lèi)別

Android 8.0(API 級(jí)別 26)開(kāi)始,必須為所有通知分配渠道,否則通知將不會(huì)顯示。通過(guò)將通知?dú)w類(lèi)為不同的渠道用戶可以停用您應(yīng)用的特定通知渠道(而非停用您的所有通知),還可以控制每個(gè)渠道的視覺(jué)和聽(tīng)覺(jué)選項(xiàng)。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    //創(chuàng)建通知渠道
    val name = getString(R.string.channel_name)
    val descriptionText = getString(R.string.channel_description)
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
    mChannel.description = descriptionText
    //注冊(cè)渠道
    val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(mChannel)
}
  • 通知標(biāo)志Android 8.0 引入了對(duì)在應(yīng)用啟動(dòng)器圖標(biāo)上顯示通知標(biāo)志的支持。通知標(biāo)志可反映某個(gè)應(yīng)用是否存在與其關(guān)聯(lián)、并且用戶尚未予以清除也未對(duì)其采取行動(dòng)的通知。通知標(biāo)志也稱(chēng)為通知點(diǎn)(強(qiáng)迫癥非常討厭的東西)。
  • 背景顏色:您現(xiàn)在可以設(shè)置和啟用通知的背景顏色。只能在用戶必須一眼就能看到的持續(xù)任務(wù)的通知中使用此功能。例如,您可以為與駕車(chē)路線或正在進(jìn)行的通話有關(guān)的通知設(shè)置背景顏色。
  • 消息樣式:使用MessagingStyle類(lèi)的通知可在其折疊形式中顯示更多內(nèi)容。對(duì)于與消息有關(guān)的通知,您應(yīng)使用MessagingStyle類(lèi)。您還可以使用新的addHistoricMessage(),通過(guò)向與消息相關(guān)的通知添加歷史消息為會(huì)話提供上下文。
  • 通知清除:系統(tǒng)現(xiàn)在可區(qū)分通知是由用戶清除,還是由應(yīng)用移除。通過(guò)NotificationListenerService類(lèi)onNotificationRemoved()
  • 休眠:用戶可以將通知置于休眠狀態(tài),以便稍后重新顯示它。重新顯示時(shí)通知的重要程度與首次顯示時(shí)相同。應(yīng)用可以移除或更新已休眠的通知,但更新休眠的通知并不會(huì)使其重新顯示。
  • 通知超時(shí):使用setTimeoutAfter()創(chuàng)建通知時(shí)您可以設(shè)置超時(shí)。您可以使用此函數(shù)指定一個(gè)持續(xù)時(shí)間,超過(guò)該持續(xù)時(shí)間后,通知應(yīng)取消。如果需要,您可以在指定的超時(shí)持續(xù)時(shí)間之前取消通知。

4.自適應(yīng)圖標(biāo)

Android 8.0(API 級(jí)別 26)引入了自適應(yīng)啟動(dòng)器圖標(biāo),它可以在不同設(shè)備型號(hào)上顯示為不同的形狀。例如,在一臺(tái)原始設(shè)備制造商 (OEM) 設(shè)備上,自適應(yīng)啟動(dòng)器圖標(biāo)可顯示為圓形,而在其他設(shè)備上則可顯示為方圓形。每個(gè)設(shè)備的原始設(shè)備制造商 (OEM) 都會(huì)提供一個(gè)蒙版,系統(tǒng)使用該蒙版渲染所有具有相同形狀的自適應(yīng)圖標(biāo)。自適應(yīng)啟動(dòng)器圖標(biāo)還會(huì)在快捷方式、“設(shè)置”應(yīng)用、共享對(duì)話框和概覽屏幕中使用。

Android9.0

1.電源管理

  • 應(yīng)用待機(jī)群組:系統(tǒng)將根據(jù)用戶的使用模式限制應(yīng)用對(duì) CPU 或電池等設(shè)備資源的訪問(wèn)。
  • 省電模式改進(jìn):開(kāi)啟省電模式后,系統(tǒng)會(huì)對(duì)所有應(yīng)用施加限制。 這是一項(xiàng)已有的功能,但在Android 9中得到了改進(jìn)。

2.隱私權(quán)變更

后臺(tái)對(duì)傳感器的訪問(wèn)受限:Android 9限制后臺(tái)應(yīng)用訪問(wèn)用戶輸入和傳感器數(shù)據(jù)的能力。 如果您的應(yīng)用在運(yùn)行 Android 9設(shè)備的后臺(tái)運(yùn)行,系統(tǒng)將對(duì)您的應(yīng)用采取以下限制:

  • 您的應(yīng)用不能訪問(wèn)麥克風(fēng)或攝像頭。
  • 使用連續(xù)報(bào)告模式的傳感器(例如加速度計(jì)和陀螺儀)不會(huì)接收事件。
  • 使用變化一次性報(bào)告模式的傳感器不會(huì)接收事件。

如果需要在運(yùn)行 Android 9的設(shè)備上檢測(cè)傳感器事件,請(qǐng)使用前臺(tái)服務(wù)

限制訪問(wèn)通話記錄:Android 9引入CALL_LOG權(quán)限組并將READ_CALL_LOG、WRITE_CALL_LOG和PROCESS_OUTGOING_CALLS權(quán)限移入該組。 在之前的Android版本中,這些權(quán)限位于PHONE權(quán)限組
如果您的應(yīng)用需要訪問(wèn)通話記錄或者需要處理去電,則您必須向CALL_LOG權(quán)限組明確請(qǐng)求這些權(quán)限。 否則會(huì)發(fā)生SecurityException

3.對(duì)使用非 SDK 接口的限制

為幫助確保應(yīng)用穩(wěn)定性和兼容性,此平臺(tái)對(duì)某些非SDK函數(shù)字段的使用進(jìn)行了限制;無(wú)論您是直接訪問(wèn)這些函數(shù)字段,還是通過(guò)反射JNI 訪問(wèn),這些限制均適用。 在 Android 9 中,您的應(yīng)用可以繼續(xù)訪問(wèn)這些受限的接口;該平臺(tái)通過(guò) toast 和日志條目提醒您注意這些接口。 如果您的應(yīng)用顯示這樣的 toast,則必須尋求受限接口之外的其他實(shí)現(xiàn)策略。

4.框架安全性變更

默認(rèn)啟用網(wǎng)絡(luò)傳輸層安全協(xié)議 (TLS):默認(rèn)使用https,會(huì)阻止http請(qǐng)求,如果想繼續(xù)使用http可以在清單文件中做如下配置:

<application
     ...
     android:usesCleartextTraffic="true">
...
</application>

5.Apache HTTP棄用

Android 6.0 中,我們移除了對(duì) Apache HTTP的支持。從· Android 9 開(kāi)始·,該內(nèi)容庫(kù)已從 bootclasspath中移除,且默認(rèn)情況下應(yīng)用無(wú)法使用它。要繼續(xù)使用Apache HTTP,以Android 9及更高版本為目標(biāo)平臺(tái)的應(yīng)用可以向其 AndroidManifest.xml添加以下內(nèi)容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

6.前臺(tái)服務(wù)

如果應(yīng)用以Android 9或更高版本為目標(biāo)平臺(tái)并使用前臺(tái)服務(wù),則必須請(qǐng)求FOREGROUND_SERVICE權(quán)限。這是普通權(quán)限,因此,系統(tǒng)會(huì)自動(dòng)為請(qǐng)求權(quán)限的應(yīng)用授予此權(quán)限。
如果以Android 9或更高版本為目標(biāo)平臺(tái)的應(yīng)用嘗試創(chuàng)建前臺(tái)服務(wù)且未請(qǐng)求FOREGROUND_SERVICE,則系統(tǒng)會(huì)拋出SecurityException

KotlinAndroid

EShop

官方文檔

最后編輯于
?著作權(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ù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,013評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,346評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,421評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,146評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,534評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,767評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,318評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,074評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,258評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,486評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,916評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,156評(píng)論 1 290
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,993評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,234評(píng)論 2 375

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