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

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)將對您的應用采取以下限制:

  • 您的應用不能訪問麥克風或攝像頭。
  • 使用連續(xù)報告模式的傳感器(例如加速度計和陀螺儀)不會接收事件。
  • 使用變化一次性報告模式的傳感器不會接收事件。

如果需要在運行 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

KotlinAndroid

EShop

官方文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容