Android 系統各版本新特性總結
Android 4.0
- Space 留白
- PopupMenu
- GlidLayout 網格佈局
Android 5.0
- MaterialDesign設計風格
- Material Theme
- Meterial Dialog
- CardView
- RecyclerView
- SwipeRefreshLayout
- Toolbar
- RippleDrawable 檢視的水波紋效果
- android L 增加了一些 Activity 的轉場動畫 —— 爆炸、滑動、淡入淡出
- tint 前後背景著色
- Palette 從影象中提取突出的顏色,這樣可以把色值賦給 ActionBar、Toolbar、或者其他,可以讓介面整個色調統一。
- 支援64位ART虛擬機器
- Heads-Up 風格通知。全新的通知中心設計(在鎖屏介面也可以直接檢視通知訊息了,使用者還可以直接在鎖屏的情況下就行回覆或進入應用。)
- setTaskDescription 最近使用。全新的“最近應用程式”。除了介面風格設計的改變之外,新的最近應用介面還借鑑了 Chrome 瀏覽器的理念,採用單獨的標籤展示方式。更重要的是,谷歌已經向開發者開放了 API,所以第三方開發人員可以利用這個改進為特定的應用增加全新的功能。
- Project Volta 電池續航改進計劃。增加了 Battery Saver 模式,在低電量的時候系統會自動降低螢幕亮度、限制自動更換背景等功能。
- MediaProjection 截圖
- JobScheduler 通過為系統定義要在以後的某個時間或在指定的條件下(例如,當裝置在充電時)非同步執行的作業來優化電池壽命
- setClipToOutline 裁剪
- 支援多種裝置(手機、平板電腦、膝上型電腦、智慧電視、汽車、智慧手錶甚至是各種家用電子產品)
- 新的 API 支援,藍芽 4.1、USB Audio、多人分享等其它特性
- Camera2
- PdfRenderer 使用點陣圖來呈現 PDF 檔案
- android.app.usage API 獲取應用使用情況統計資訊的 API
Android 6.0
- 指紋識別
- 動態許可權申請
- FloatingActionButton
- Snackbar
- TabLayout
- NavigationView
- CoordinatorLayout
- AppBarLayout
- CollapsingToolbarLayout
- App Linking
- TextInputLayout
- 大量漂亮流暢的動畫
- 支援快速充電的切換
- 支援資料夾拖拽應用
- 相機新增專業模式
- 全新的電源鍵選單 一般來說,安卓的電源鍵選單都是關機/重啟/飛行,安卓6.0變成了關機/重啟/緊急,關機和重啟就不用贅述了,這個緊急模式是為了手機快沒電的時候設計的,相當於飛航模式的高階版,可以關閉一切耗電應用,盡最大可能節省電量。
- 可自定義鎖介面樣式 支援電話、資訊、相機等快捷方式在鎖屏介面的定製,使用者可以根據自己的喜好調整這些圖示的位置,或者開啟或關閉這些快捷方式。
- 全新的快速設定風格 不但是鎖屏介面可以定製,安卓6.0還採用了全新的快速麵板的色彩方案,使用者可以通過更換主題換顏色。
- 原生的應用許可權管理 無需第三方應用和Root許可權,原生的安卓6.0就支援應用許可權管理,使用者可以在安裝應用時選擇關閉一些應用許可權,這一功能非常方便,再也不用擔心流量偷跑和扣費了。
- Now on Tap功能 “Now on Tap ”功能,是指將Google Now(一種語音助手)作為底層植入到安卓6.0系統中,使用者只要只要雙擊home鍵啟動Google Now,“這意味著使用者隨時都能啟動搜尋功能,目前暫時不知道這個功能進入國內會不會閹割掉。
- 支援RAW格式照片 RAW格式的支援是眾多拍照愛好者夢寐以求的, 然而絕大多數的安卓手機都沒有或者剔除了這項功能。由於照片儲存為jpg格式時或多或少都會損失一些畫質,所以支援RAW格式是非常明智的。
Android 7.0
- 畫中畫
- 分屏多工
- 增強的Java8語言模式
- 通知欄快速回復
- 夜間模式
- OpenJDK替換Java API
- Android 7.0中採用了一項具有實時程式碼剖析功能的ARI JIT編譯器,它能夠在安卓應用程式在執行時不斷提高自身的效能
Android 8.0
- 通知變更
- 引入了通知渠道用來讓使用者統一管理通知。
- Android O 還引入了通知角標,當一個應用的通知沒有 dismiss 的時候,會在應用的圖示上面顯示一個角標,長摁這個應用的圖示,也會顯示通知的詳情資訊。
- 同時還引入了一個通知睡眠的功能,使用者可以休眠一個通知,讓它在指定的時候再出現,被休眠的時候仍然可以修改這個通知的設定,但是不會讓這個通知立馬出現。另外還可以設定一個通知的超時時間,用來讓某個通知在一段時間之後被自動 cancel。
- 其他的比如可以獲取通知的清除方式,修改通知的背景顏色,修改通知的樣式
- 畫中畫模式
- 在 Android O 之前,畫中畫模式已經可用於 Android TV,而 Android O 則讓這一個功能可以支援到其他的 Android 裝置
- 自適應圖示
- 自動填充框架
- xml 字型和可下載字型
- Pinned Shortcut
- 這個功能在 7.1.1 之後就已經有了,長摁桌面圖示就會顯示一個 App shortcuts 選單欄,然後長摁選單欄上的一項,就能把它拖下來成為單獨的一個應用圖示,被拖下來的單獨的應用圖示就是Pinned shortcuts,雖然這個功能在 7.1.1 引入的,但是在 O 版本我們可以通過提供的 API 按照一定的步驟去使用程式碼新增
- TextView 字型自動適配
- 媒體增強
- 其他特性
- 可以設定 Activity 支援廣色域;
- 可以設定最大的螢幕寬高比;
- 多螢幕支援,支援裝置外接一個顯示器;
- 最新版本 emoji 支援,使用 EmojiCompat 類可以讓應用在老版本的應用上顯示新的 emoji;
- 支援點選位置的捕捉;
- 支援設定應用類別,這些類別用於將應用呈現給使用者的用途或功能相同的應用歸類在一起,例如按流量消耗、電池消耗和儲存消耗將應用歸類。
- Smart Text Selection,這個功能有人可能在今年老羅的錘子手機發佈會上看到過,思想是很類似的,複製一段數字,就會出現直接撥打電話的選項,複製一段地址就會彈出進入地圖的選項,地圖 APP 可以一下這個地方能否成為一個很方便入口。
- 行為變更
- 後臺執行限制
- 安全性
- 網路連線和 HTTP(S) 連線
- 許可權:在 Android O 之前,如果應用在執行時請求許可權並且被授予該許可權,系統會錯誤地將屬於同一許可權組並且在清單中註冊的其他許可權也一起授予應用。對於針對 Android O 的應用,此行為已被糾正。系統只會授予應用明確請求的許可權。然而,一旦使用者為應用授予某個許可權,則所有後續對該許可權組中許可權的請求都將被自動批准。
- 媒體變更
- Native libraries
- API 變更
- WebView 新 API
- findViewById:findViewById 函式現在返回的是 ,所以以後 findViewById 就不需要強轉了。
- 統一的 margins 和 padding:layout_marginVertical,layout_marginHorizontal,paddingVertical,paddingHorizontal
- AnimationSet:支援了動畫的 seek 和動畫倒轉播放
- 提醒視窗
Android 9.0
新特性
室內WIFI定位
Android P增加了對RTT Wi-Fi協議的支援,以此作為室內定位的基礎。
在支援硬體支援的Android P裝置上,開啟定位並且開啟WIFI掃描後就可以使用該功能進行定位。應用可以測量與附近支援RTT的Wi-Fi接入點(AP)的距離。裝置必須啟用位置並啟用Wi-Fi掃描(在設定>位置下)。使用這個功能不會連線到WIFI,而且為了保持隱私,只有手機能確定AP到裝置的距離,反之則不能。
如果裝置測量到3個或更多AP的距離,則可以使用多點定位演算法來估算最適合這些測量值的裝置位置。其結果通常可以精確到1至2米範圍。
//注:該處在2018.3.8的版本中還有bug,WIFI_RTT_RANGING_SERVICE沒有新增到@ServiceName標記中
WifiRttManager wifiRttManager = (WifiRttManager) getSystemService(Context.WIFI_RTT_RANGING_SERVICE);
RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint();
builder.addWifiAwarePeer();
wifiRttManager.startRanging(builder.build(), () -> {...}, new RangingResultCallback{...});
該功能API在android.net.wifi.rtt下。
“劉海”螢幕支援
Android P 支援了手機螢幕是不規則形狀時的獲取(主要是應對劉海屏吧)。可以使用類似windowInsets.getDisplayCutout()來獲取一些你想要的資訊。
//您可以在自己的View中獲取到不應該繪製的部分螢幕
getRootWindowInsets().getDisplayCutout().getBounds();
getRootWindowInsets().getDisplayCutout().getSafeInsetBottom();
getRootWindowInsets().getDisplayCutout().getSafeInsetLeft();
getRootWindowInsets().getDisplayCutout().getSafeInsetRight();
getRootWindowInsets().getDisplayCutout().getSafeInsetTop();
//也可以設定Window的屬性
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
通知
Android P還增加了許多對通知的支援。
增強體驗
從Android 7.0開始,就優化了Android通知欄的體驗。
在P當中,又新增了下述功能:
支援影象:Android P現在在手機上的訊息通知中顯示影象。您可以在訊息上使用setData()來顯示影象。
會話參與者的簡化支援:新的Notification.Person類用於標記參與聊天的人,包括他們的頭像和URI。還有其他的一些API,現在都用Person類作為標誌引數而不是CharSequence。
Notification.Builder builder = new Notification.Builder(this, "a");
//新的聊天物件
Notification.Person p = new Notification.Person();
//在MessagingStyle中用Person代替了以往的CharSequence
Notification.MessagingStyle messageStyle = new Notification.MessagingStyle(p);
Notification.MessagingStyle.Message message = new Notification.MessagingStyle.Message("aaa", 100, p);
//可以顯示影象了
message.setData();
messageStyle.addMessage(message);
builder.setStyle(messageStyle);
Notification notification = builder.build();
將回復另存為草稿:當用戶無意中關閉訊息通知時,您的應用可以檢索系統傳送的EXTRA_REMOTE_INPUT_DRAFT來獲取一些資訊。
確定對話是否是群組對話:您可以使用setGroupConversation()來有目的地將對話標識為群組對話或非群組對話。
為意圖設定語義動作:setSemanticAction()方法允許您為某個動作提供語義含義,如標記為讀取,刪除,回覆等。
SmartReply
通道設定、廣播以及免打擾
Android O引入了Notification Channels,可讓您為要顯示的每種型別的通知建立一個使用者可自定義的頻道。 Android P通過以下更改簡化了通知渠道設定:
阻止渠道:使用者現在可以在應用的通知設定中阻止整組渠道。您可以使用isBlocked()方法來確定某個組何時被阻止,不對被阻止的組傳送訊息。
此外,您的應用可以使用新的getNotificationChannelGroup()方法查詢當前渠道設定。
新的廣播型別:Android系統現在在通知頻道和頻道組的阻塞狀態發生變化時傳送廣播。擁有被阻止的頻道或群組的應用可以監聽這些Intent並作出相應的反應。有關這些Intent的更多資訊,請參閱NotificationManager參考中更新後的常量列表。有關對廣播Intent作出反應的資訊,請參閱廣播。
新的免打擾優先順序類別:NotificationManager.Policy有兩個新的策略常量:PRIORITY_CATEGORY_ALARMS(按優先順序排列)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER(優先排列媒體,系統和遊戲聲音)
多相機支援和相機更新
現在,可以同時從兩個或更多的物理攝像頭同時獲得資料流。在具有雙前置或雙後置攝像頭的裝置上,可以實現無法使用單個攝像頭實現的功能,例如無縫縮放,散景 ,和立體視覺。 該API還允許您呼叫合理的或者融合的相機流,以便在兩臺或更多臺相機之間自動切換。
相機的其他改進包括新的android.hardware.camera2.params.SessionConfiguration
,有助於減少初始捕捉期間的延遲。而Surface共享可讓相機客戶端處理各種使用情況,而無需停止和啟動相機流式傳輸。 此外還添加了基於顯示的閃光燈支援的API。
Android P還支援支援deveices上的外部USB / UVC相機。
新的圖片解碼
Android P新增了ImageDecoder類,為解碼影象提供了一種更優的方法。由此可以用ImageDecoder來替換BitmapFactory和BitmapFactory.Options。更多使用方法請參見官方API。
String filePath = "test";
File file = new File(filePath);
ImageDecoder.Source source = ImageDecoder.createSource(file);
ImageDecoder.decodeBitmap(source);
ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo, source1) -> {
//裁剪影象
imageDecoder.setCrop();
//調整大小
imageDecoder.setResize();
});
BitmapFactory.decodeFile(filePath);
動畫
Android P引入了一個新的AnimatedImageDrawable類來繪製和顯示GIF和WebP動畫影象。 AnimatedImageDrawable與AnimatedVectorDrawable類似,因為AnimatedImageDrawable動畫也是基於RenderThread工作的。 RenderThread本身在內部使用工作執行緒進行解碼,因此解碼不會干擾RenderThread。 這種實現允許您的應用擁有動畫影象,而無需管理其更新或干擾應用的UI執行緒。
Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
// Prior to start(), the first frame is displayed
((AnimatedImageDrawable) d).start();
}
HDR VP9視訊,HEIF影象壓縮和媒體API
Android P增加了對HDR VP9 Profile 2的內建支援。
Android P支援HEIF影象(隔壁IOS在2017年10月推的新的圖片編碼)編碼。
Android P還引入了MediaPlayer2。該播放器支援使用DataSourceDesc構建的播放列表。
MediaPlayer2.create();
注:筆者對影象/視訊編解碼方面不甚了了,有興趣的可以自行參閱API。
JobScheduler中的資料成本敏感度
在Android P當中,JobScheduler得到了改進,使其能夠更好地為使用者處理與網路相關的工作,並配合運營商分別提供網路狀態訊號。
Jobs現在可以定義出其估計的資料大小,預取訊號,並指定詳細的網路要求 - 運營商可以將網路報告為擁塞或不用流量計費的。然後,JobScheduler根據網路狀態管理工作。例如,當網路擁塞時,JobScheduler可能推遲大型網路請求。在不用流量計費的的網路上時,JobScheduler可以預讀來改進使用者體驗。
神經網路API 1.1
對神經網路API新增了9個功能:Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, and Squeeze。
改進表單自動填充
Android 8.0(API26)引入了自動填充框架,這使得在應用中填寫表單變得更加容易。 Android P引入了自動填充服務並實現了多項改進,以在填寫表單時進一步增強使用者體驗。 有關更多詳細資訊,請參閱自動填充框架。
注:該自動填充框架筆者應是Google服務中的內容,國內使用者可能會體驗不到(或許有廠商自己的版本)。
安全增強
Android P引入了許多新的安全功能,包括統一的指紋驗證對話方塊和敏感交易的高確信度的使用者確認。 有關更多詳細資訊,請參閱安全更新頁面。
Android 備份加密
Android P支援使用客戶端金鑰對Android備份進行加密。 這項隱私措施,需要裝置的PIN,圖案密碼或標準密碼才能從使用者裝置備份的資料中恢復資料。