Android 5.0 技術(shù)新趨勢(shì)
由于 Android 的版本分裂比較嚴(yán)重,整個(gè)新系統(tǒng)升級(jí)可能需要一兩年甚至更長(zhǎng)時(shí)間。所以目前使用 Android 5.0 的大部分是喜歡嘗鮮的用戶,同時(shí)現(xiàn)在市場(chǎng)上能夠很好支持 Android 5.0 的應(yīng)用又很少,如果開(kāi)發(fā)者能捕捉這個(gè)機(jī)會(huì),從這些用戶那里得到更好的反饋,或者更好的證明機(jī)會(huì),都是非常有價(jià)值的。
在 Android 5.0 發(fā)布之后,我認(rèn)為有幾個(gè)地方可以讓開(kāi)發(fā)者做得更好,比如可以建立一個(gè)更好看的應(yīng)用,或者能夠解決在應(yīng)用中最大的性能問(wèn)題——電量消耗的問(wèn)題,等等。同時(shí) Android 5.0 也帶來(lái)了更多的可能性,讓開(kāi)發(fā)者可以做出不一樣的應(yīng)用,以及能夠在更多的設(shè)備上部署服務(wù)。下面我分別介紹一下我對(duì) Android 5.0 可能帶來(lái)的技術(shù)趨勢(shì)的看法。
更美的應(yīng)用——Material Design在 Android 5.0 的宣傳中強(qiáng)調(diào)最多的一個(gè)亮點(diǎn)就是「Material Design」,從設(shè)計(jì)語(yǔ)言來(lái)講,這個(gè)特點(diǎn)是能在將整個(gè)素材鋪平的同時(shí)還遵循一定的物理材質(zhì)的需求。這樣的設(shè)計(jì)可以讓?xiě)?yīng)用感覺(jué)更活潑、具有更豐富的顏色, 有無(wú)處不在的陰影,以及動(dòng)畫(huà)效果更真實(shí)等等。對(duì)于技術(shù)來(lái)說(shuō),Material Design 解決了兩個(gè)非常大的問(wèn)題,其一是「陰影」,它所有的陰影都是默認(rèn)系統(tǒng)實(shí)現(xiàn)的——只要配置 Z 軸的高度,所有的陰影都可以通過(guò)系統(tǒng)默認(rèn)實(shí)現(xiàn)。
另一個(gè)是「動(dòng)畫(huà)」,可以說(shuō) Android 5.0 將動(dòng)畫(huà)應(yīng)用到了各個(gè)角落,實(shí)際上在這方面 Android 做了相當(dāng)多的技術(shù)工作,使這個(gè)效果不是簡(jiǎn)單的貼圖,實(shí)現(xiàn)出來(lái)的效果有點(diǎn)像游戲里面的投影,也就是真實(shí)的投影效果。
為了實(shí)現(xiàn)這些效果,Android 曾經(jīng)嘗試過(guò)不同的方案,最后使用的方案是當(dāng) Z 軸比較矮的時(shí)候,使用一個(gè)「面光源」,相當(dāng)于一面的光打下來(lái),如果 Z 軸比較高的時(shí)候,可能會(huì)加一個(gè)「點(diǎn)光源」,盡可能使整個(gè)投影變得真實(shí),當(dāng)然它沒(méi)有辦法支持在圖形學(xué)中比較復(fù)雜的「光線追蹤」——連續(xù)的反射效果,因?yàn)橛袀€(gè) 試驗(yàn)結(jié)果是只要開(kāi)啟「光線追蹤」 10 秒就會(huì)導(dǎo)致手機(jī)變得滾燙,以現(xiàn)在的手機(jī)性能還沒(méi)有辦法很完美地支持。
而在這一技術(shù)的背后有個(gè)發(fā)展過(guò)程,大約是在 2001 年的時(shí)候,Android 開(kāi)始做硬件加速技術(shù),它的計(jì)算同樣以硬件加速,會(huì)在 GPU 上進(jìn)行差值計(jì)算,用以實(shí)現(xiàn)陰影特效,動(dòng)畫(huà)也是同理。現(xiàn)在 Android 5.0 將動(dòng)畫(huà)做到無(wú)所不在,比如給一個(gè)頁(yè)面做了陰影,陰影的抬升有動(dòng)畫(huà),界面的切換有動(dòng)畫(huà),每一次點(diǎn)擊、每一次拖動(dòng)、每一次滾動(dòng)都有動(dòng)畫(huà)。
現(xiàn)在最典型的動(dòng)畫(huà)是「水波紋」,現(xiàn)在 Android 5.0 上點(diǎn)任何東西都有一個(gè)水波漾起的動(dòng)畫(huà)效果。當(dāng)然,開(kāi)發(fā)者也可以指定各種各樣的動(dòng)畫(huà),比如一些基于路徑的動(dòng)畫(huà)和界面切換時(shí)的動(dòng)畫(huà),整個(gè)動(dòng)畫(huà)的實(shí)現(xiàn)技術(shù)也是依 賴于 Android 在兩年前做的一個(gè)后臺(tái)的獨(dú)立渲染線程,它能夠?qū)崿F(xiàn)異步渲染這些動(dòng)畫(huà)。
對(duì)于老版本而言,如果想要實(shí)現(xiàn)類似的陰影效果或動(dòng)畫(huà)效果,讓整個(gè)界面變得有動(dòng)感,單靠自己的能力做是特別難的。Android 5.0 提供了所有的這些開(kāi)發(fā)支持,只要用 Android 5.0 SDK,用一些支持包,就可以配上它的風(fēng)格、調(diào)色板、以及一部分控件,配置一些動(dòng)畫(huà),就可以很快地建設(shè)出一個(gè)特別有「Material Design」風(fēng)格的界面。現(xiàn)在真正支持「Material Design」的應(yīng)用還比較少,如果用這樣的方式來(lái)構(gòu)建自己的產(chǎn)品,其實(shí)可以給那些偏 Geek 的用戶一個(gè)特別好的感覺(jué)。
更省電的應(yīng)用——Project Volta大家以前做 Android 開(kāi)發(fā)的時(shí)候可能涉及最多的問(wèn)題就是「為什么你的應(yīng)用那么耗電?」其實(shí)整個(gè)耗電模型在 Android 模型里的計(jì)算是非常復(fù)雜的。Volta 這個(gè)項(xiàng)目就是要在 Android 5.0 解決耗電問(wèn)題。這次的解決辦法還是很特別的——就是給開(kāi)發(fā)者提供了能力,如果開(kāi)發(fā)者能夠很好利用這些能力,就能在系統(tǒng)上面跑得更快。Android 提供的能力是新的后臺(tái)任務(wù)系統(tǒng),非常像 iOS 系統(tǒng),可以配置一組觸發(fā)條件,比如網(wǎng)絡(luò)變化、電量消耗到了什么程度、設(shè)備是不是進(jìn)入了休眠狀態(tài),這些東西可以觸發(fā)一個(gè)后臺(tái)任務(wù),這個(gè)后臺(tái)任務(wù)的執(zhí)行也是限 時(shí)的,如果在時(shí)限之內(nèi)沒(méi)有完成,系統(tǒng)會(huì)將其取消,這個(gè)過(guò)程特別像 iOS 整個(gè)的機(jī)制。它可能取代了類似常駐后臺(tái)、定時(shí)任務(wù)或者需要更復(fù)雜的策略才能保持后臺(tái)運(yùn)行的東西,實(shí)現(xiàn)更省電的需求。
更重要的內(nèi)容是 Project Volta 提供了一組調(diào)試工具,因?yàn)橐郧翱梢栽?Android 上面調(diào)試內(nèi)存、調(diào)試界面等等,唯獨(dú)很難知道電量耗在哪兒了,這個(gè)調(diào)試工具加上可視化工具可以展現(xiàn)你的界面上各個(gè)元器件以及各個(gè)環(huán)節(jié)的耗電情況,例如在哪個(gè) 時(shí)間段的耗電量是最多的,這時(shí)候有什么應(yīng)用在運(yùn)行,什么設(shè)備是大量耗電的。通過(guò)這樣的分析,能夠更好地了解應(yīng)用為什么耗電,幫助開(kāi)發(fā)者解決問(wèn)題。
系統(tǒng)服務(wù)Screen Capturing每次 Android 新版本升級(jí)都伴隨著一件事就是將原來(lái)只有系統(tǒng)有的能力開(kāi)放給了開(kāi)發(fā)者,開(kāi)發(fā)者可以用這些能力來(lái)建設(shè)不一樣的應(yīng)用。 比如豌豆莢做過(guò)的一些嘗試,我們想做一些游戲截屏、錄屏或者是一些 OCR的分析,目的是想分析圖片里的一些的東西。這在 Android 老的版本里是不支持的,除非 Root 才能用的這樣的能力,但是新的系統(tǒng)服務(wù)已經(jīng)支持了截屏和錄屏。這樣的話,如果發(fā)揮你的想象力,要做一些游戲錄屏或者其他應(yīng)用,這就提供了一個(gè)新的機(jī)會(huì)。
App Usages應(yīng)用的使用信息也是一樣的,我們?cè)瓉?lái)想知道手機(jī)上那個(gè)設(shè)備用戶最喜歡用哪個(gè)應(yīng)用,什么時(shí)候用,這些信息都沒(méi)有,現(xiàn)在 Android 5.0 提供了這樣的接口,開(kāi)發(fā)者不僅可以知道用戶在各個(gè)應(yīng)用上耗費(fèi)的時(shí)間,甚至可以知道什么時(shí)候用什么時(shí)間,整個(gè)切換事件都是可以查到的,這些信息原來(lái)也只有 Android自己知道,在這個(gè)版本里這些信息全部開(kāi)放給了開(kāi)發(fā)者,這樣能夠更好地發(fā)揮開(kāi)發(fā)者的想象。
Recent Screen新的 Recent Screen 取代了原來(lái)的 Recent Tasks,特點(diǎn)是原來(lái)就像一個(gè)最近使用的應(yīng)用列表,現(xiàn)在相當(dāng)于最近使用的頁(yè)面列表。 對(duì)于豌豆莢來(lái)說(shuō),我們希望用戶不只是看到自己什么時(shí)候用了豌豆莢,而是看到用戶在豌豆莢里瀏覽了三個(gè)應(yīng)用,可以隨時(shí)回到那三個(gè)應(yīng)用里面,類似這樣的功能。 其實(shí)這樣可以給開(kāi)發(fā)者提供一個(gè)更好的用戶入口,讓用戶回到你的應(yīng)用時(shí)更方便,或者能力更強(qiáng)。
更多設(shè)備支持Android 5.0 在更多設(shè)備上都有了支持,不僅在了手機(jī)上,現(xiàn)在可以伴隨著Android Wear、Android TV、Android Auto,這三個(gè)現(xiàn)在都有 SDK ,整個(gè)發(fā)展?fàn)顟B(tài)還都比較好。
Android Wear 已經(jīng)有了很多 App,Android TV 上也有很多游戲和應(yīng)用,Android Auto 發(fā)布了第一版SDK。比如說(shuō)在 Android 5.0 里面增強(qiáng)了通知欄,用戶看到手機(jī)上是一個(gè)普通的通知欄,但同樣的通知欄到手表上去看,比如打開(kāi) Android Wear,發(fā)現(xiàn)可以上下翻動(dòng)、左右翻動(dòng)郵件,在這樣的設(shè)備上能獲得一個(gè)更好的體驗(yàn),同樣它提供了 TV input Framework (TIF) 框架。
比如對(duì)于流媒體來(lái)說(shuō),可以非常快速地把內(nèi)容部署在 Android TV 上,開(kāi)發(fā)者做一個(gè) Android TV 的 App,用戶可以在 Android TV 上用這樣的內(nèi)容。
同樣,通過(guò)新的 MediaPlay Session 接口,可以方便地把用戶手機(jī)上的流媒體放到汽車上,可以實(shí)現(xiàn)一進(jìn)汽車就自動(dòng)播放、在汽車的車載系統(tǒng)上控制手機(jī)的內(nèi)容,這些新的接口其實(shí)都是提供了很多新的 機(jī)會(huì)。 現(xiàn)在這樣的 App 還偏少,比如目前看 Android Wear 的 App 可能做得最多的就是賣各種各樣的表盤,實(shí)際上這個(gè)方面還有很多的可能性,當(dāng)然它是一個(gè)特別新的領(lǐng)域,存在著一定的未知性,如果現(xiàn)在看這樣的機(jī)會(huì),可能給你 提供的是很多新的產(chǎn)品機(jī)會(huì)。
以上就是我感覺(jué)目前 Android 5.0 對(duì)于移動(dòng)開(kāi)發(fā)需要關(guān)注的點(diǎn),總體來(lái)說(shuō),如果需要做一個(gè)新產(chǎn)品,開(kāi)發(fā)者需要看到一些新的技術(shù)可能性,看到一些新的技術(shù)的趨勢(shì),希望這個(gè)分享能夠?qū)氖麻_(kāi)發(fā)的朋友們有所幫助。
作者簡(jiǎn)介范懷宇,豌豆莢應(yīng)用平臺(tái)技術(shù)負(fù)責(zé)人。范懷宇 2011 年初加入豌豆莢,先后負(fù)責(zé)過(guò)豌豆莢 Windows 2.0 版本、豌豆莢云服務(wù)等業(yè)務(wù),目前負(fù)責(zé)豌豆莢應(yīng)用平臺(tái)和基礎(chǔ)技術(shù)相關(guān)業(yè)務(wù)。范懷宇長(zhǎng)期專注于 Android 相關(guān)技術(shù)的研究,著有《Android 開(kāi)發(fā)精要》 一書(shū)。
相關(guān)文章:
1. 詳解盒子端CSS動(dòng)畫(huà)性能提升2. CSS hack用法案例詳解3. PHP字符串前后字符或空格刪除方法介紹4. 使用HttpClient消費(fèi)ASP.NET Web API服務(wù)案例5. Jsp+Servlet實(shí)現(xiàn)文件上傳下載 刪除上傳文件(三)6. ASP.NET Core實(shí)現(xiàn)中間件的幾種方式7. input submit、button和回車鍵提交數(shù)據(jù)詳解8. ASP常用日期格式化函數(shù) FormatDate()9. 詳解瀏覽器的緩存機(jī)制10. JSP servlet實(shí)現(xiàn)文件上傳下載和刪除
