Google I/O 2017 上有哪些關於 Android 的新亮點?

本題已經收錄知乎圓桌 ? Google I/O 2017,更多「Google I/O」相關話題歡迎關注討論


先插段題外話:

在I/O之前幾天,Google曾經在Android developer blog上介紹了Project Treble:

https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html

這本來應該是一件非常激動人心的事情。想想看,只要廠商都按照規定通過VTS(對,我說的是VTS,不是CTS)測試,以後Android framework層的更新就可以直接由Google推送,不用看廠商的臉色了。國內各家魔改framework的廠商,以後繼續在國內賣魔改版當然無所謂,但如果想要走向世界,是要上O還是不上呢?

但有趣的是I/O上完全沒人提這個東西……

好了言歸正傳。

普通開發者而言,第一大好消息當然是Architecture Components:

先說lifecycle。因為有著複雜的activity/application lifecycle,Android上各種listener的register/unregister從來都是繁瑣而無趣的事情。現在有了顯式的Lifecycle封裝與管理,藉助LifecycleActivity和LifecycleObserver,終於可以不用在onStart/onStop/onPause/onResume里反覆register/unregister各種listener了:

然後是LiveData:

看個例子你就知道了:

熟悉RxJava的基友可以一眼認出來。

最後是終於有了官方的Sqlite ORM - Room:

熟悉Hibernate或Spring JPA/Spring Data的盆友也應該會覺得眼熟。

當然支持LiveData&

以及RxJava 2:

順便,Spring家可是最近才在Spring Data里加進reactive的支持。

總之Room是靠annotation幫你在編譯時就生成各種腳手架代碼,有sql &<-&> object的靜態類型檢查,並且支持reactive。快扔掉你的greendao吧。

個人觀點是這些東西其實官方早就應該有了,浪費工業界這些年一直重新發明各種輪子的精力。

上面的截圖都來自I/O講座 https://www.youtube.com/watch?v=FrteWKKVyzI ,強烈建議觀看。另外還有Ian Lake的一篇post: https://medium.com/@ianhlake/lifecycle-aware-data-loading-with-android-architecture-components-f95484159de4

還有github上的samples: googlesamples/android-architecture-components

如果你堅持看到了這裡,很可能你也對Android O的性能改進感興趣:Android O的ART在性能方面的改進簡介 - 知乎專欄

時間關係暫時寫不了更多,推薦另外幾個session的youtube錄像:

  • What"s New in Android: https://www.youtube.com/watch?v=1N9KveJ-FU8
    (和往年一樣,由Android相聲三人組Chet Hasse, Romain Guy, Dan Sandler擔綱演出)
  • Android Performance: An Overview: https://www.youtube.com/watch?v=Qfo5fdoXrTU
  • Kotlin入門(如果你還沒用過):https://www.youtube.com/watch?v=X1RVYt2QKQE (JetBrains的這位VP也有講好相聲的潛力)
  • Performance and Memory Improvements in Android Run Time (ART): https://www.youtube.com/watch?v=iFE2Utbv1Oot=527s (我上面的專欄文章有介紹)
  • Building an Android Instant App: https://www.youtube.com/watch?v=9Jg1D07NgeI

後面兩天還有不少關於Android的好session,建議直接去youtube關注Android developer頻道。

最後,與本文無關但放鬆一下,附加一段Hadi Harini在Kotlin入門這個session里的冷笑話:

Um, semicolons in Kotlin are optional. And the reason they are optional is so that you can have endless arguments whether you should use them or not.
We try to compete with JavaScript on that.

中譯:

唔,(行尾的)分號在Kotlin里是可選的。這樣的話你們就可以無休無止地爭下去,到底是用或者不用分號。

我們可是要和JS在這一點上好好競爭一番。

ps. Hadi是JetBrains負責技術佈道(Developer Advocacy)的VP。


O新增的後台限制在第二預覽版里有一個小改動:

在第一個預覽版里,只對targetapi達到o(26)的應用使用新增的後台運行限制。用戶不能對舊版應用直接開啟該設定,除非通過appops(設定該應用的RUN_IN_BACKGROUND op 為 ignore)

第二個預覽版據加入了用戶可使用的開關(我猜它背後的實現就是前面的改appops項。

這樣一來就多了一個問題,它和已有的電池優化選項的關係是什麼,禁用電池優化也能影響到(解除一部分)O新增的限制


求別出Kotlin培訓班和《30天精通Kotlin》,不希望kotlin成為下一個php。


Kotlin居然被升級為官方語言了!這簡直出乎我的意料。

這門語言說實話槽點非常大,不僅編譯器經常出bug,類型系統受限於JVM導致很多邏輯可行,符合標準的代碼不能通過編譯,還得靠手動加註解。

和Java互操作性非常差,必須靠各種註解補丁。

而且居然沒有值類型!!!

編譯後產生大量的贅余方法!

沒有Checked Exception,類名不需要和文件名相同,包名不需要和目錄相同,一點都不嚴格,容易出錯!

居然支持默認參數,不知道JVM支持重載嗎?

泛型協變逆變用了非常反直覺的in out。

Gradle build需要下載gradle插件,超級慢,網路不好根本沒法用!

標準庫超級大,反人類!

Extension污染原類,非常不優雅!

函數居然可以寫在類外面?這不面向對象!Java多優雅!

還有那個什麼狗屁null safety,完全就是干擾開發流程。好好的代碼非得加個感嘆號或者問號。

憑什麼參數不可變?垃圾。

就用Java多好,又穩定,又安全,教程多,資源多。

不要用Kotlin!不要學Kotlin!


What"s new in Android? #WNIA

看點比較少,但還是不乏有亮點的(包含個人小吐槽。)

其實我是一個 Android 腦殘粉來的,不但把Google 和 Udacity合作開發的 Android 開發納米學位全部搞定,還把針對納米學位的 Google Android 開發者證書也一起搞定了!Keynote裡面放出我的證書的時候,我還站起來搖擺了一番!

Picture in Piture

用中文說,就是畫中畫吧。我記得當年iOS在被吐槽是單任務操作系統的時候,Android沾沾自喜說自己當然是多任務。但是iPad現在都支持縮小視頻到角落多少年了,怎麼Android才開始剛剛支持這功能?不對啊,我記得很多年前我媽用的LG手機也支持呀?

###Smart Text Selection 據說用了向前傳播神經網路實現了自動選擇店名,地址,電話和email,我想說,iphone上地址和電話似乎很早就可以高亮了? 感覺這事情也用不到神經網路吧? 是不是殺雞用牛刀了呀。不過我還是期待著,谷歌能把這個功能玩出不同花樣來。

Autofill with Google

Android O開放了Autofill的介面, 可以在app裡面自動填賬號密碼? what? 自動填賬號密碼,相信很多人和我一樣,都不知道說什麼好。

Notification Dots

可以在app圖標上放一個原點,來提示用戶這個app需要關注。我覺得這個功能好是好,不過,大家的強迫症都來自微信朋友圈的圓點吧?這樣會不會給人帶來強迫症恐慌???

###Tensorflow Lite 一個針對Android的Tensorflow版本,感覺有點雞肋。好好的我直接在雲端或者在我的本地訓練模型不就好了,為什麼要跑去手機上呢? 就算Tensorflow Lite性能優化做到極致,在手機上跑訓練也是耗電大戶啊。 如果光光跑一點 Inference的話,感覺也夠嗆。這個還沒正式推出,保留好奇心吧。

Auto-Sizeing Textview

文本框可以自動根據自己的大小來縮放裡面的文字了。Emm, 這貌似全場高潮。我確實是蠻開心的。

findViewById 不用強制類型轉換了

以前大家都知道 findViewById 返回的是 View,然後我們總是要把他強制轉化為它的子類。

老的方法

TextView tv = (TextView)findViewById(R.id.mytextview);

新的方法

TextView tv = findViewById(R.id.mytextview);

好吧,這其實也蠻不錯的。

#Kotlin 就像ios開發搞出來一個swift一樣,現在android開發又搞出來一個Kotlin,demo演示了1行Kotlin 代碼代替89行java代碼,但我好像還是激動不起來。又要去學新東西了 T_T

說完以上所有,正以為他們要真開始說O了呢!

結果呢


Kotlin!JetBrains的勝利


這個自動填寫(autofill),如果集成到系統中。效果堪比ios的鑰匙串


卡特林出的價格我Java出5倍

又可以糟蹋別人家叫kotlin的媳婦了


在聽完日本大叔玩小黃瓜和做早操賣萌的演講之後…我想學tensorflow了


最重點的是深入人工智慧,觸手可及。

http://deploy.news/2017/05/18/google-io-re/

http://deploy.news/2017/05/18/android-o/


亮點就是谷歌對它的系統已經有了明確的目標,他知道他要做什麼。除了安卓8,Fuchsia OS也有消息,新內核也很好。至於ios,我覺得喬布斯死後,蘋果就不再是蘋果了,缺少爆點,


也就是關注一下,由於FW的作用,國內是沒有辦法使用原生的andriod只能使用安卓,我一直有個疑問:「到底是原生的andriod本來就這麼弱?還是被第三方深度定製之後才這麼弱的?」希望有大神賜教!


安卓o,新特性蠻多的,系統更新的新機制,通知管理等等


5月17號,別急


今年別說爆點了 一點亮點都沒有 我一個android開發者熬夜看完都覺得沒勁 白期待了一波


推薦閱讀:

如何看待 Google 與 HTC 和聯想合作研發 Standalone VR?
Google Photos 如何能做到為全球用戶提供無容量限制的高質量圖片視頻免費存儲服務?
為什麼微軟、谷歌、蘋果三家大型的科技公司,只有谷歌較好的完成了一個應用,多個平台的運行?
Google I/O 2016 上發布了哪些值得期待的新產品?
Google I/O 2016 上發布的 Android N 有哪些新特性?

TAG:Android開發 | GoogleIO | Android | GoogleIO2017 |