Android Weekly Notes Issue #258

Android Weekly Issue #258

May 21st, 2017
Android Weekly Issue #258
本期内容: 围绕着Google I/O的热潮, 本周的posts除了几篇小工具和软件设计原则的讨论, 其他都是在说Android Architecture Components和Kotlin.

ARTICLES & TUTORIALS

DebugPort 2.0

REPL(Read Eval Print Loop)是在命令行界面中, 读取每一行输入, 执行, 然后输出结果, 提供即时的反馈. Java 9会提供这么一个REPL的环境, 叫JShell.

考虑到在Android中能用上可能要等很长时间, 所以作者一年前开始弄了一个这个项目: Android-DebugPort.

在你的应用中加入这个依赖, 然后运行, 在通知栏就会弹出通知, 然后在电脑上就可以使用telnet来连接到app.

可以调用方法, 执行脚本, 查询数据库等.

Understanding Law of Demeter

软件设计要求松耦合.
Law of Demeter, 即迪米特原则, 亦称为最少知道原则.

文章介绍了在这种原则下应该如何设计类和它的方法.

Object Oriented Tricks: #6 SLAP your functions

SLAP: Single Level of Abstraction Priciple, 单层抽象原则.

一个太长的方法往往有各种缺点, 那么怎么判断一个方法过长了呢? 根据行数来判断不太科学, 所以SLAP可以用在这里:
一个代码块中的代码应该处于同一层抽象级别.

一个方法不应该有几个不同级别的抽象, 换言之, 一个方法只做一件事.

当你在方法代码中用注释来分割代码块的时候, 这些代码可以提取出来, 这样最初的方法就变成了一个隐藏实现细节, 只展示逻辑步骤的ComposedMethod.

Android and Architecture

Google推出Architecture Components的预览, 宣布了一种新的Android App构架指导.

意见不是处方

写Android应用有多种方式, 这里提供的只是一系列的指导意见, 来帮助你更好地构架Android应用.

Android framework中有一些定义良好的API, 用于处理和底层系统的交互, 比如Activity, 但是这些是你应用的入口点, 并不是你的构架块. 这些framework的组件并不强制你分离数据和UI, 也不提供清晰的方式来处理独立于生命周期的数据保存.

Building Blocks

Architecture Components帮助你实现一个更明智的架构, 它们帮助你: 自动管理activity和fragment的生命周期, 避免内存和资源泄露; 保存Java数据对象到SQLite数据库.

Lifecycle Components

新的lifecycle-aware components提供了一种方式来把你应用的核心组件绑定到生命周期事件上, 删除了显式的依赖路径.

这里核心的类是Lifecycle, 它使用了生命周期状态和事件(states and events)的枚举来追踪相关组件的生命周期.

LifecycleOwner是一个接口, 其中getLifecycle()方法返回一个Lifecycle对象. LifecycleObserver是一个观察者, 可以监控组件的生命周期事件(通过在方法上加注解).

LiveData

LiveData
是一个数据持有类, 同时也是一个Obervable, 允许它的数据被监听, 同时它也知道生命周期.

当你的UI订阅了底层数据的改动, 并且绑定了一个LifecycleOwner, LiveData会确保这个observer:

  • 在生命周期处于活跃状态时得到数据更新.
  • 当生命周期结束时取消订阅.
  • LifecycleOwner重新开始时(比如旋转变化或从back stack中跳出), 得到最新的数据.

ViewModel

ViewModel是一个辅助类, 用于盛放Activity或Fragment的UI数据, 从UI controller的逻辑中分离出view的数据.

只要Activity/Fragment存在, ViewModel的数据就被保持着. 包括Activity/Fragment因为状态变化而销毁重建的情况. 这样ViewModel就在重建时提供可用的数据.

结合ViewModelLiveData, 就为数据提供了一个了解生命周期的可观察的容器. 其中LiveData负责通知, ViewModel负责数据保存.

Data Persistence

提出了Room library, 提供了一个在SQLite之上的object-mapping抽象层, 允许流式的数据库访问.

Room中三个主要的组件:

  • Entity: 代码数据库中一行的数据, 用带有注解的Java数据类构建. 每一个Entity在它自己的表中被保存.
  • DAO (Data Access Object): 定义了访问数据库的方法. 使用注解来绑定SQL到每个方法.
  • Database. 用注解来定义entities列表和数据库版本; 定义DAO的列表; 同时也是底层数据库连接的主要访问点.

Guide to App Architecture

Guide to App Architecture显示如何用Architecture Components来构建一个稳健的, 模块化的, 可测试的app.

Why Kotlin?

作者分享了为什么相比于Java, 他更喜欢Kotlin.

My take on“Architecture Components”

作者分享了他在项目中使用Architecture components的一些心得.

他们的项目原先是MVP + Content Provider的. 为了实验加入Architecture components, 他又新写了一个MVP的Demo项目, 把它转化成MVVM, 又加入Architecture components的新组件来实现. (代码比较多, 我没有详细看).

ConstraintLayout.com

这个网站ConstraintLayout.com成立了, 用于讨论和ConstraintLayout相关的一切.

Looking at Room and LiveData - Part 1

Android之前一直没有提出过一个官方的构架模式, 所以大家总在讨论各种MVP, MVVM, MVI模式, 各种库等等. 终于在Google I/O 2017, Android团队发布了Architecture Components, 来提供一个构建Android App的最佳实践指导.

什么是Architecture Components?

Architecture Components是一系列的库和指导集合, 作为构建Android app的基础. 针对一些常见的使用场景, 目的是减少样板和重复代码, 让你能集中精力到你应用的核心功能代码上.

主要组件包括:

  • Room: a SQLite object mapper.
  • LiveData: a lifecycle aware observable.
  • ViewModel: Activity/Fragment和应用其他部分的交流点.
  • Lifecycle: 核心部分, 包含了组件的生命周期.
  • LifecycleOwner: 核心接口, 用于有生命周期的组件.
  • LifecycleObserver: 当某个生命周期事件发生的时候, 应该做些什么呢?

之后作者写了一个小App作为例子, 用了MVVM + Android Architecture Components. 其中详细介绍了Room和LiveData的用法.

Room — Getting Started

一个简单的例子, 介绍如何使用Room. (例子用Kotlin).

Generating Kotlin code with KotlinPoet

Jake Wharton的文章, Square推出了KotlinPoet, 用来生成kotlin代码.

Why you should totally switch to Kotlin

要转换到Kotlin的若干个理由. (有17条).

30 New Android Libraries

30个Android的新库, 都是自2017年3月份以后发布的.
作者主观挑选的, 所以并没有排序.

列表比较长, 我就不一一列了, 不少库还是挺有趣的.

LIBRARIES & CODE

android-architecture-counter-sample

使用Kotlin和Android architecture components写的一个sample app.

KotlinPoet

Kotlin代码生成库.

memechat

Flutter构建的一个聊天应用, 用了Firebase, Google Sign in和设备相机.

News

几个大新闻:

  • Android O发布了第二个预览版.
  • Android team发布了Architecture Components. - Android正式宣布了支持Kotlin.
  • Instant App现在对所有开发者开放
  • Android Studio发布了3.0 Canary, 推出了一系列的新工具.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容