来了解下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)并显示合理的数据子集。 该解决方案可让您创建关注数据的应用程序,并快速响应用户的输入,即使在数据更新期间也如此。 它也与房间库完全集成。

译文。


分享到:


相關文章: