來了解下2018GoogleI

每年Google I/O 開發者大會都會為程序員帶來Android開發新鮮感。 其中一個會談的想法似乎對我很有吸引力 - 如何以現代的方式編寫代碼。 現代(理論上)意味著

更好,更快,更容易。 Google的新組件會改變我們對Android Framework的看法嗎?

今年,這次演講涉及了用於代碼分析和內存跟蹤的新工具,關於Kotlin和KTX庫的簡要概述,關於佈局,Jetpack組件,生命週期,最佳編碼實踐以及許多更多內容的一些建議。 在本文中,我將重點介紹Google的編程建議和新的架構方法。

Kotlin

我只是喜歡發言者的一句話:“這是我們與Kotlin達成的懶惰水平”

為了“比以往更快地實現懶惰”,Google為Android應用程序開發提供了一組擴展,看起來非常酷,並且讓我想嘗試一下(從Lib庫的自述文件中獲取示例):

view.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {override fun onPreDraw(): Boolean {viewTreeObserver.removeOnPreDrawListener(this)actionToBeTriggered()return true}})

Kotlin with Android KTX:

view.doOnPreDraw {

actionToBeTriggered()

}

多麼省事的代碼體驗。 您只需將KTX添加到您的依賴項中,並將相應的軟件包導入到您的項目文件中。

Kotlin編碼風格(Kotlin coding style)

在編碼風格方面,提到了一些提示。 用於Java文檔代碼示例的mNames在Kotlin中不再使用。 該屬性語法的原因使得難以使用該樣式。

此外,特別是對於乾淨而一致的代碼的粉絲來說,還有新的官方風格和互操作指南。 Interop指南的編寫與Java和Kotlin的互操作性有關,因此用這兩種語言編寫的API可以以自然的方式使用。

Layouts

首先,AbsoluteLayout很糟糕。 但是......誰使用它? 它自API 3以來已被棄用,所以...

提到了一些關於佈局使用的簡單提示:

LinearLayout適用於簡單的用例,

FrameLayout - Activity UI中只有一個視圖的情況,我們不需要高級佈局管理器,所以我們只需要為視圖設置填充,

GridLayout被認為是難以維護和不靈活的,

建議使用ConstraintLayout而不是RelativeLayout。 它提供了更好的子控件的相對定位能力。 為了最終說服我們,演講者提出了另一條重要的路線:

“ConstraintLayout是一個和RelativeLayout一樣功能的控件。”

Android Jetpack

Jetpack是“加速應用程序開發的下一代組件”。 這是一套依賴庫,工具和指南,可幫助您輕鬆快捷地構建卓越的Android應用程序。 它提供了常見的基礎架構代碼,因此您可以專注於使您的應用獨一無二的原因 Android Jetpack組件作為“非捆綁”庫提供,不屬於底層Android平臺。

Slices

作為搜索的結果,切片組件將成為在Google智能助手內部顯示應用UI的一種方式。 對我而言,這意味著很多可能性 - 豐富,靈活的佈局,動態和互動內容,特別是今年助手進行了大規模更新。

來了解下2018GoogleI/OAndroid開發新姿勢

Navigation

導航(Navigation)是構建您的應用內用戶界面的新組件。 它簡化了Android應用程序中導航實現的過程 - 為您處理FragmentTransactions的複雜性,同時獲得ViewModel和Lifecycle等所有架構組件的好處。

來了解下2018GoogleI/OAndroid開發新姿勢

Navigation Editor

Navigation Editor可讓您以可視方式查看和管理導航。 它可以完成一個活動的應用程序結構。 新方法是儘可能使用單活動結構。 這意味著用戶需要更豐富的體驗,尤其是在正確使用片段動畫的情況下。 庫的這一部分處於alpha測試階段,所以在穩定版本發佈之前可能需要一段時間,但是Android Framework看起來正朝著正確的方向發展。

Fragments

Fragments被許多人認為是編碼相當困難,正在得到更新。 核心平臺API現已棄用。 使用支持庫版本或Android Jetpack版本。

設計模式

問題:我應該如何設計我的Android應用程序? 我應該使用什麼樣的MVC?

“我們不在乎。 我們不是你。 我們不知道你的應用程序是如何工作的。 我們不知道您的應用程序的最佳架構,所以請自行決定!“

......但這並不意味著我們無法在不同場景下獲得有關推薦應用架構的提示。

Lifecycle

處理生命週期的舊方法是重寫它的每個方法:onCreate(),onResume(),onDestroy()等。生命週期狀態只有通過覆蓋所有這些方法才是已知的; 沒有API來查詢這個。 因此,這些方法中的邏輯太多,在Activity / Fragment重啟過程中發生的事情太多了。 新方法使用生命週期組件 - 對象LifecycleOwner。 現在您可以查詢您的應用程序的狀態,或者附加觀察者並從這些方法獲取回調。 此外,您可以將您的LifecycleOwner實施到您的應用中確實有意義的地方。 這意味著更小的活動!

來了解下2018GoogleI/OAndroid開發新姿勢

Lifecycle object diagram

Views and Data

Activities中有太多東西的類似問題伴隨著視圖和數據更改。 我們擁有關於視圖的所有信息,數據以及跟蹤其生命週期的方法。 感謝ViewModel,我們可以減少Activity中的行數,並且只有關於視圖和對ViewModel的引用的信息。 因此,我們不是將數據視圖,跟蹤生命週期和數據更改,而是將其全部抽象為LiveData - 可觀察的和生命週期感知的數據持有者類。 優點? 沒有內存洩漏,由於停止的活動和適當的配置更改而導致崩潰。

來了解下2018GoogleI/OAndroid開發新姿勢

Old and new approach to data in Activities — moder

Room

來了解下2018GoogleI/OAndroid開發新姿勢

Room architecture diagram

Data Paging(數據分頁)

最後提到的Lib庫是Paging Library。 它實際上是RecyclerView助手 - 它可以更容易地逐步加載數據。 此外,Lib庫可以幫助您的應用程序觀察(通過LiveData或RxJava2)並顯示合理的數據子集。 該解決方案可讓您創建關注數據的應用程序,並快速響應用戶的輸入,即使在數據更新期間也如此。 它也與房間庫完全集成。

譯文。


分享到:


相關文章: