1. 程式人生 > >Android各系統之間的新特性

Android各系統之間的新特性

Android歷史各版本之間的新特性Android作業系統是一個由谷歌Google開放手持裝置聯盟共同開發發展的移動裝置作業系統,其最早的一個版本Android 1.0 Beta釋出於2007年11月5日,至今已經發布了多個更新。Android 釋出歷程Android 釋出歷程 [2]這些更新版本都在前一個版本的基礎上修復了bug並且添加了前一個版本所沒有的新功能。Android作業系統曾有兩個預釋出的內部版本,它們的代號分別是鐵臂阿童木(Astro)和發條機器人(Bender)。由於涉及到版權問題,從2009年5月開始,Android作業系統改用甜點來作為版本代號,這些版本按照大寫字母的順序來進行命名。以下是甜點代號及翻譯:Cupcake:
紙杯蛋糕
Donut:甜甜圈Éclair:閃電泡芙、法式奶油夾心甜點、鬆餅Froyo:凍酸奶Gingerbread:薑餅Honeycomb:蜂巢Ice Cream Sandwich:冰激凌三明治冰淇淋三明治Jelly Bean:果凍豆
  KitKat:奇巧巧克力棒Lolipop:棒棒糖Marshmallow:棉花糖Nougat:牛軋糖Oreo:奧利奧

開發代號

編輯Android在正式發行之前,最開始擁有兩個內部測試版本,並且以著名的機器人名稱來對其進行命名,它們分別是:鐵臂阿童木(Astro Boy,注意不是Astro阿童木)和發條機器人(Bender)。需要注意的是,Android 1.0和1.1的版本代號並不是這兩個,
維基百科
中的“Android Version History”詞條部分是錯誤的。 [3]後來由於涉及到版權問題,谷歌將其命名規則變更為用甜點作為它們系統版本的代號的命名方法。Android 1.0是於2008年9月23日正式釋出的Android第一版,Android 1.1釋出於2009年2月2日,但其實谷歌內部有更多的1.1版的變種。甜點命名法開始於第三版Android 1.5(實際上是第四版,因為Android 1.0其實有兩版)。而從Android 1.6 Donut甜甜圈開始,專案組才正式確定將Android開發代號首字母從“C”一直延續下去。值得一提的是,Android 1.1 的內部代號為 Petit Four ,但專案主管喜歡美味的點心,最終結束了這種命名方式。So Astro Boy
 and Bender were real, but they went with the super-early milestone builds. 完整的時間表是這樣的:
  • Android milestone builds (with Astro Boy and Bender floating around in here somewhere)
  • Android 1.0(沒有開發代號)
  • Android 1.1 - Petit Four
  • Android 1.5 - Cupcake
  • Android 1.6 - Donut
  • Android 2.0/2.1 - Éclair
  • Android 2.2 - Froyo
  • Android 2.3 - Gingerbread
  • Android 3.0/3.1/3.2 - Honeycomb
  • Android 4.0 - Ice Cream Sandwich
  • Android 4.1/4.2/4.3 - Jelly Bean
  • Android 4.4 - KitKat
  • Android 5.0/5.1 - Lollipop(Android L)
  • Android 6.0 - Marshmallow(Android M)
  • Android 7.0 -Nougat(Android N)
  • Android 8.0 -Oreo(Android O)
  • API等級

    編輯隨著版本的更迭,應用程式程式設計介面(API)等級不斷髮生。下面將目前為止所有API等級羅列出來,並與Android各版本一一對應。API等級1:Android 1.0API等級2:Android 1.1 Petit FourAPI等級3:Android 1.5 CupcakeAPI等級4:Android 1.6 DonutAPI等級5:Android 2.0 ÉclairAPI等級6:Android 2.0.1 ÉclairAPI等級7:Android 2.1 ÉclairAPI等級8:Android 2.2 - 2.2.3 FroyoAPI等級9:Android 2.3 - 2.3.2 GingerbreadAPI等級10:Android 2.3.3-2.3.7 GingerbreadAPI等級11:Android 3.0 HoneycombAPI等級12:Android 3.1 HoneycombAPI等級13:Android 3.2 HoneycombAPI等級14:Android 4.0 - 4.0.2 Ice Cream SandwichAPI等級15:Android 4.0.3 - 4.0.4 Ice Cream SandwichAPI等級16:Android 4.1 Jelly BeanAPI等級17:Android 4.2 Jelly BeanAPI等級18:Android 4.3 Jelly BeanAPI等級19:Android 4.4 KitKatAPI等級20:Android 4.4WAPI等級21:Android 5.0 LollipopAPI等級22:Android 5.1 LollipopAPI等級23:Android 6.0 MarshmallowAPI等級24:Android 7.0 NougatAPI等級25:Android 7.1 Nougat

    API等級26:Android 8.0 Oreo

    目前常用版本之間的新特性

Android4.0

1)新鎖屏介面:

Android4.0重新設計了鎖螢幕UI,下方的解鎖虛擬按鍵向周圍發射出微光,輕輕拖動就可以解鎖,比原來在UI上確實有很大的進步。

2)全新Widget排列:

主螢幕上的Widget外掛是Android區別於其他系統最大的特點,新的Widget將會像程式介面那樣排列。程式和Widget外掛分為兩個標籤,清楚明瞭。

3)更直觀的程式資料夾:

現在直接拖動程式到另一個程式圖示上會生成資料夾,像iOS所作的那樣,但區別在於拖動聯絡人快捷方式會生成一個快速撥號快捷方式,很智慧,比原來便捷很多。

4)人臉識別解鎖:

Google在現場進行了演示,雖然最開始遇到點小麻煩失敗了,但人臉識別解鎖對於安全性保障還是挺有必要的。

5)截圖功能:

同時按下電源鍵和音量“下”即可,對於反饋系統Bug和分享手機資訊是一個很實用的升級。

6)全新通知欄:

現在在鎖屏介面也可以下拉通知欄檢視新通知。如果不想要某條通知,水平滑動即可取消。

7)語音識別的鍵盤:

現場識別中Androd4.0將Man識別成了Map,但令人驚訝的是它識別出了笑臉符號:-)的英文。使用者可以通過增強的語音輸入來發簡訊。

8)瀏覽器:

全新瀏覽器支援最多16個活動標籤頁,同樣的,扔掉即可關閉某個標籤頁。而且直接支援儲存網頁進行離線瀏覽

Android5.0

1) 全新meterial Design 設計風格(紙張化的使用者體驗)

meterial 主題

元件的陰影(CardView)

Drawable動畫和樣式效果。

2)全新的通訊中心設計

鎖屏時也可以檢視訊息通知。

3)支援64位ART虛擬機器

放棄之前一直使用的Dalvik虛擬機器,改用了ART模式。
提前編譯.
垃圾回收增強。
debug支援增強。

4)電池續航能力

5)WebView


Android6.0

1)許可權管理

許可權管理是 Android M 最大的改變,許可權管理更加精細,並且由以前的安裝時靜態授權,改為現在的執行時動態授權。大家對 Android 的許可權吐槽已久,Android 應該能極大的改善這方面的問題。主要改變有: 
系統設定中可以對 APP 各個許可權單獨控制
許可權根據內容進行分組了
普通許可權還是在安裝時授權
其他許可權在執行時系統彈窗授權,並且要解析使用這個許可權的目的

2)指紋解鎖

3)相機API


Android7.0

1)多視窗支援

使用者可以在一次螢幕上開啟兩個應用。

2)通知功能的增強

在 Android 7.0 中,我們重新設計了通知,使其更易於使用並且速度更快。部分變更包括:

模板更新:

我們正在更新通知模板,新強調了英雄形象和化身。開發者將能夠充分利用新模板,只需進行少量的程式碼調整。

訊息傳遞樣式自定義:

您可以自定義更多與您的使用 MessagingStyle 類的通知相關的使用者介面標籤。您可以配置訊息、會話標題和內容檢視。

捆綁通知:

系統可以將訊息組合在一起(例如,按訊息主題)並顯示組。使用者可以適當地進行拒絕或歸檔等操作。如果您已實現 Android Wear 的通知,那麼您已經很熟悉此模式。

直接回復:

對於實時通訊應用,Android系統支援內聯回覆,以便使用者可以直接在通知介面中快速回復簡訊。

自定義檢視:

兩個新的 API 讓您在通知中使用自定義檢視時可以充分利用系統裝飾元素,如通知標題和操作。

3)Project Svelte:後臺優化

Project Svelte 在持續改善,以最大程度減少生態系統中一系列 Android 裝置中系統和應用使用的 RAM。

4)VR支援


Android8.0

1)通知渠道細分操作(Notification Channels)

使用者可以根據通知渠道進行細分控制,而不是同一管理應用的所有通知。 
我們開發者需要去專門配置通知的相關內容。

2)畫中畫(PIP)

多視窗顯示模式,多用於視訊播放,即你可以一邊發微信一邊看視訊。

3)自適應圖示(Adaptive Icons)

系統可以基於裝置選擇的蒙版將這些圖示顯示為不同形狀。同時還實現與圖示的自動互動,並在啟動器、快捷方式、設定、共享對話方塊以及概覽螢幕中使用它們。通過定義兩張圖層(前景與背景)你可以制定你的桌面圖示外觀。

開發時必須按照以下的規範定義你的圖層大小:
1、 兩張圖層大小都必須為108 x 108 dp。
2、 圖層中心 72 x 72dp 範圍為可視範圍。
3、 系統會保留四周外的36dp 範圍用於生成有趣的視覺效果(如視差和跳動)。

4)固定快捷方式和小部件 (Pinningshortcuts)

放置於桌面上,用於更快速的開啟某一 APP的某單一任務

Android9.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{...});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

該功能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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

通知

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();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

將回復另存為草稿:當用戶無意中關閉訊息通知時,您的應用可以檢索系統傳送的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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

動畫

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();  
}
  • 1
  • 2
  • 3
  • 4
  • 5

HDR VP9視訊,HEIF影象壓縮和媒體API

Android P增加了對HDR VP9 Profile 2的內建支援。

Android P支援HEIF影象(隔壁IOS在2017年10月推的新的圖片編碼)編碼。 
Android P還引入了MediaPlayer2。該播放器支援使用DataSourceDesc構建的播放列表。

MediaPlayer2.create();
  • 1

注:筆者對影象/視訊編解碼方面不甚了了,有興趣的可以自行參閱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,圖案密碼或標準密碼才能從使用者裝置備份的資料中恢復資料。