
Android5.0
1.虛擬機
在 Android 5.0 中,全面由Dalvik轉用ART(Android Runtime)編譯。大大提高了性能。
- 預先 (AOT) 編譯
- 改進的垃圾回收 (GC)
- 改進的調試支持
2.Material Design 樣式
采用全新Material Design設計,頁面更加的美觀,立體。
3.浮動通知
設備未鎖定且其屏幕處于打開狀態(tài),通知可以顯示在小型浮動窗口中,稱為浮動通知。
4.綁定服務
啟動或綁定服務必須顯式啟動,如果隱式啟動,會引發(fā)下列異常:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit
如果非要隱式啟動,可以使用下列方案來避免異常:
val intent = Intent("Service對應的Action")
intent.`package` = packageName
bindService(intent,mServiceConnection,BIND_AUTO_CREATE)
Android6.0
1.運行時權限
用戶可直接在運行時管理應用權限。這種模式讓用戶能夠更好地了解和控制權限,同時為應用開發(fā)者精簡了安裝和自動更新過程。用戶可為所安裝的各個應用分別授予或撤銷權限。
//檢測某個權限是否已經被授予
//PackageManager.PERMISSION_GRANTE:獲得權限
//PackageManager.PERMISSION_DENIED:為獲得權限
ContextCompat.checkSelfPermission(Context context,String permission)
//申請權限
ActivityCompat.requestPermissions(Activity activity,String[] permissions, int requestCode)
//處理授權
onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
//解釋說明權限的用途
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity,String permission)
2.低電耗模式和應用待機模式
低電耗模式:如果用戶拔下設備的電源插頭,并在屏幕關閉后的一段時間內使其保持不活動狀態(tài),設備會進入
低電耗模式。 在該模式下設備會嘗試讓系統(tǒng)保持休眠狀態(tài)。在該模式下,設備會定期短時間恢復正常工作,以便進行應用同步,還可讓系統(tǒng)執(zhí)行任何掛起的操作。應用待機模式:應用待機模式允許系統(tǒng)判定應用在用戶未主動使用它時處于空閑狀態(tài)。當用戶有一段時間未觸摸應用時,系統(tǒng)便會作出此判定。如果拔下了設備電源插頭,系統(tǒng)會為其視為空閑的應用
停用網絡訪問以及暫停同步和作業(yè)。
在低電耗模式下,您的應用會受到以下限制:
- 暫停訪問網絡
- 系統(tǒng)忽略喚醒鎖定
- 標準AlarmManager鬧鐘推遲到下一個維護期
- 系統(tǒng)不執(zhí)行WLAN掃描
- 系統(tǒng)不允許運行同步適配器SyncAdapter
- 系統(tǒng)不允許運行JobScheduler
3.取消支持 Apache HTTP
Android 6.0版移除了對 Apache HTTP 的支持,推薦使用HttpURLConnection,因為它可以通過透明壓縮和響應緩存減少網絡使用,并可最大限度降低耗電量。
如果想繼續(xù)使用Apache HTTP,必須先在build.gradle文件中如下聲明:
android {
useLibrary 'org.apache.http.legacy'
}
Android7.0
1.文件訪問權限
為了提高私有文件的安全性,應用私有目錄被限制訪問,此設置可防止私有文件的元數(shù)據泄漏,如它們的大小或存在性。
-
無法使用file://這樣的形式訪問文件,不然會報錯
FileUriExposedException,現(xiàn)在改用FileProvide來訪問文件。
<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文件內容:
<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:文件夾“相對路徑”
- name:名稱標志字符,不能重名。
| 標簽 | 路徑 |
|---|---|
| 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" />:對應的文件路徑為:getFilesDir() / image/
- DownloadManager不再按文件名分享私人存儲的文件。
2.移除三項隱式廣播
- CONNECTIVITY_ACTION:網絡狀態(tài)監(jiān)聽。
- ACTION_NEW_PICTURE:拍照廣播
- ACTION_NEW_VIDEO:錄視頻廣播
注意:移除的是
隱式廣播。正在前臺運行的應用程序如果在主線程中動態(tài)注冊了該廣播,該應用程序仍然可以接收到該廣播。
3.進一步優(yōu)化低電耗模式
Android 6.0引入了低電耗模式,當用戶設備未插接電源、處于靜止狀態(tài)且屏幕關閉時,該模式會推遲 CPU和網絡活動,從而延長電池壽命。而Android 7.0則通過在設備未插接電源且屏幕關閉狀態(tài)下、但不一定要處于靜止狀態(tài)(例如用戶外出時把手持式設備裝在口袋里)時應用部分CPU和網絡限制,進一步增強了低電耗模式。
Android8.0
1.后臺執(zhí)行限制
- 在后臺運行的應用對后臺服務的訪問受到限制。
- 應用無法使用其清單注冊大部分隱式廣播。
如果在后臺服務中調用startService(),則會拋出IllegalStateException。 調用Context.startForegroundService()將啟動一個前臺服務。即使應用在后臺運行,系統(tǒng)也允許其調用 Context.startForegroundService()。不過,應用必須在創(chuàng)建服務后的五秒內調用該服務的startForeground()。
2.后臺位置限制
為節(jié)約電池電量、保持良好的用戶體驗和確保系統(tǒng)健康運行,在運行Android 8.0的設備上使用后臺應用時,降低了后臺應用接收位置更新的頻率。此行為變更會影響包括Google Play服務在內的所有接收位置更新的應用。
影響的API:
- Fused Location Provider (FLP)
- Geofencing
- GNSS Measurements
- Location Manager
- Wi-Fi Manager
3.通知

在Android 8.0中,我們已重新設計通知,以便為管理通知行為和設置提供更輕松和更統(tǒng)一的方式。這些變更包括以下內容:
-
通知渠道:
Android 8.0引入了通知渠道,其允許您為要顯示的每種通知類型創(chuàng)建用戶可自定義的渠道。用戶界面將通知渠道稱之為通知類別。
從Android 8.0(API 級別 26)開始,必須為所有通知分配渠道,否則通知將不會顯示。通過將通知歸類為不同的
渠道,用戶可以停用您應用的特定通知渠道(而非停用您的所有通知),還可以控制每個渠道的視覺和聽覺選項。
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
//注冊渠道
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
-
通知標志:
Android 8.0引入了對在應用啟動器圖標上顯示通知標志的支持。通知標志可反映某個應用是否存在與其關聯(lián)、并且用戶尚未予以清除也未對其采取行動的通知。通知標志也稱為通知點(強迫癥非常討厭的東西)。 - 背景顏色:您現(xiàn)在可以設置和啟用通知的背景顏色。只能在用戶必須一眼就能看到的持續(xù)任務的通知中使用此功能。例如,您可以為與駕車路線或正在進行的通話有關的通知設置背景顏色。
-
消息樣式:使用
MessagingStyle類的通知可在其折疊形式中顯示更多內容。對于與消息有關的通知,您應使用MessagingStyle類。您還可以使用新的addHistoricMessage(),通過向與消息相關的通知添加歷史消息為會話提供上下文。 -
通知清除:系統(tǒng)現(xiàn)在可區(qū)分通知是由用戶清除,還是由應用移除。通過
NotificationListenerService類的onNotificationRemoved()。 - 休眠:用戶可以將通知置于休眠狀態(tài),以便稍后重新顯示它。重新顯示時通知的重要程度與首次顯示時相同。應用可以移除或更新已休眠的通知,但更新休眠的通知并不會使其重新顯示。
-
通知超時:使用
setTimeoutAfter()創(chuàng)建通知時您可以設置超時。您可以使用此函數(shù)指定一個持續(xù)時間,超過該持續(xù)時間后,通知應取消。如果需要,您可以在指定的超時持續(xù)時間之前取消通知。
4.自適應圖標
Android 8.0(API 級別 26)引入了自適應啟動器圖標,它可以在不同設備型號上顯示為不同的形狀。例如,在一臺原始設備制造商 (OEM) 設備上,自適應啟動器圖標可顯示為圓形,而在其他設備上則可顯示為方圓形。每個設備的原始設備制造商 (OEM) 都會提供一個蒙版,系統(tǒng)使用該蒙版渲染所有具有相同形狀的自適應圖標。自適應啟動器圖標還會在快捷方式、“設置”應用、共享對話框和概覽屏幕中使用。

Android9.0
1.電源管理
- 應用待機群組:系統(tǒng)將根據用戶的使用模式限制應用對 CPU 或電池等設備資源的訪問。
-
省電模式改進:開啟省電模式后,系統(tǒng)會對所有應用施加限制。 這是一項已有的功能,但在
Android 9中得到了改進。
2.隱私權變更
后臺對傳感器的訪問受限:Android 9限制后臺應用訪問用戶輸入和傳感器數(shù)據的能力。 如果您的應用在運行 Android 9設備的后臺運行,系統(tǒng)將對您的應用采取以下限制:
如果需要在運行
Android 9的設備上檢測傳感器事件,請使用前臺服務。
限制訪問通話記錄:Android 9引入CALL_LOG權限組并將READ_CALL_LOG、WRITE_CALL_LOG和PROCESS_OUTGOING_CALLS權限移入該組。 在之前的Android版本中,這些權限位于PHONE權限組。
如果您的應用需要訪問通話記錄或者需要處理去電,則您必須向CALL_LOG權限組明確請求這些權限。 否則會發(fā)生SecurityException。
3.對使用非 SDK 接口的限制
為幫助確保應用穩(wěn)定性和兼容性,此平臺對某些非SDK函數(shù)和字段的使用進行了限制;無論您是直接訪問這些函數(shù)和字段,還是通過反射或 JNI 訪問,這些限制均適用。 在 Android 9 中,您的應用可以繼續(xù)訪問這些受限的接口;該平臺通過 toast 和日志條目提醒您注意這些接口。 如果您的應用顯示這樣的 toast,則必須尋求受限接口之外的其他實現(xiàn)策略。
4.框架安全性變更
默認啟用網絡傳輸層安全協(xié)議 (TLS):默認使用https,會阻止http請求,如果想繼續(xù)使用http可以在清單文件中做如下配置:
<application
...
android:usesCleartextTraffic="true">
...
</application>
5.Apache HTTP棄用
在Android 6.0 中,我們移除了對 Apache HTTP的支持。從· Android 9 開始·,該內容庫已從 bootclasspath中移除,且默認情況下應用無法使用它。要繼續(xù)使用Apache HTTP,以Android 9及更高版本為目標平臺的應用可以向其 AndroidManifest.xml添加以下內容:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
6.前臺服務
如果應用以Android 9或更高版本為目標平臺并使用前臺服務,則必須請求FOREGROUND_SERVICE權限。這是普通權限,因此,系統(tǒng)會自動為請求權限的應用授予此權限。
如果以Android 9或更高版本為目標平臺的應用嘗試創(chuàng)建前臺服務且未請求FOREGROUND_SERVICE,則系統(tǒng)會拋出SecurityException。