Android Weekly Notes Issue #257

Android Weekly Issue #257

May 14th, 2017
Android Weekly Issue #257
本期内容包括: Gradle中关于项目的一些设置; Android设备上的各种id讨论; ViewPagerAnimator这个库的进一步介绍; Kotlin中的Nothing类型介绍; 实现Parcelable的类和测试; Android开发中一些提高效率的快捷键.

ARTICLES & TUTORIALS

Make or break… with Gradle

作者讲了他们的一些工作习惯:

  • Git分支管理.
    • 所有向主分支的提交都必须通过Pull Request.
    • 仅在CI通过后才允许merge.
  • Lint设置.
    • build.gradle中的lintOptions设置.
    • ./gradlew check会跑所有的单元测试, UI测试和Lint.
  • 代码分析工具.
  • 生成文档.
    • 用CheckStyle要求所有的public方法都有JavaDoc注释(默认已经实现了).
    • 实现Gradle JavaDoc Plugin.
  • 代码测试率报告.
    • Jacoco.
    • 可以设置一些规则来检测意外打出的log和注释掉的代码(Code Smell).

Identifying an Android Device

在Android设备上可以通过程序获取各种id来识别一个设备或者一次安装. 这篇文章就讨论各种id:

  • 通过Settings.Secure获取到的Android ID.
  • Android Build.SERIAL.
  • Android Build.MODEL.
  • Android Build.BRAND.
  • Android Build.MANUFACTURER.
  • Android Build.DEVICE.
  • Android Build.PRODUCT.
  • IMEI (International Mobile Equipment Identity).
  • Phone Number.
  • ICCID (Sim Serial Number).

ViewPagerAnimator – The Advanced Stuff

上次我们介绍了ViewPagerAnimator这个库, 在ViewPager切换时进行动画, 但是上次只介绍了简单的颜色变化, 本文介绍一些关于API的高级设定: 变化的属性可以是自定义的类型; API的良好设计使得使用的代码在支持Java 8的环境下可以大幅度地得到简化.

Nothing (else) matters in Kotlin

Kotlin中的一切都有一个类型, 甚至还有一个类型叫Nothing.

Kotlin中没有void类型, 当一个方法fun没有显示地声明返回值的时候, 它返回的其实是Unit类型.

Unit是一个真的类型, 继承Any(Any对应Java中的Object), 只接受单个的值, 是一个单例(为了避免每次方法返回Unit之后分配内存).

如果我们有一个方法, 方法中只抛出一个异常, 如果我们不特殊声明, 它的返回值仍是Unit, 但是也许我们应该返回Nothing:

fun fail(): Nothing {
    throw RuntimeException("Something went wrong")
}

Nothing是一个无人居住的类型, 在运行时没有值会是这个类型, 它也是其他类的子类.

当作为返回值时, UnitNothing到底有什么区别呢?

举例来说明:

val data: String = intent.getStringExtra("key") ?: fail()
textView.text = data

如果fail()方法返回Nothing, 我们要么得到String, 要么抛出异常; 如果返回Unit, 我们会得到一个error, 以为Unit不能转换为String.

如果不显式声明String类型呢?

val data = intent.getStringExtra("key") ?: fail()
textView.text = data

如果fail()返回Nothing, 类型是String;
如果返回Unit, 类型是Any, 但TextView期待的是一个CharSequence, 所以你仍然会得到一个error.

Nothing的用途就是用来显式地标记一个方法永远也不会成功地完成(它可能会抛出异常, 进入死循环或者导致一个控制流转变).

Nothing?有且仅有一个实例, 是null.
Nothing?是所有nullable类型的子类.

Android Parcelables Made Easy

可以在Android Studio中装一个插件, 来自动生成Parcelable的代码:
Android Studio > Preferences > Plugins > 搜索Parcelable > 安装Android Parcelable Code Generator.

安装之后, 在你的类中, 只需要声明字段, 然后Cmd + N, 选Parcelable就可以生成相关的代码了.

之后, 好的做法是为你的类写一个单元测试, 一旦有人加了新字段, 他们也需要保证Parcelable.
为了让你的测试fail的时候显示的信息更有效, 你还需要覆写toString()方法和equals()方法.(这些都是可以自动生成的).

Android shortcuts and tricks to boost up your productivity!

Android开发中一些提高效率的快捷键:

  • 在Activity和它的布局间切换:
    • 在Activity声明的那一行用鼠标点icon.
    • Cmd + Shift + O 输入文件名.
    • Cmd + Shift + A 输入related symbol. (可以把这个存为一个自定义的shortcut).
  • 在xml的文字和design之间切换: Ctrl + Shift + Left/Right.
  • 扩展/缩减选中文字: Opt + Up/Down.
  • 生成新类: Cmd + N; Opt + Enter.
  • 去实现类: Cmd + Opt + B.
  • 实现一个方法: Opt + Enter; Ctrl + I.
  • 去基类方法: Cmd + U; 去实现类方法: Cmd + B.
  • 覆写基类方法: Ctrl + O.
  • 在子类中给基类加方法: 在子类中把方法标记为@Override, 然后在@Override上按Opt + Enter, 选择Pull method xxx to YYY.
  • 改变方法参数: Cmd + F6.
  • 交换方法参数: Cmd + Opt + Shift + Left/Right.
  • 定位当前文件: 导航烂最左边有一个圆形小按钮可以帮你定位文件, 如果你想要自动, 可以勾选Autoscroll from Source.
  • 把local变量改为成员变量: Cmd + Opt + F.
  • 提取layout和style. (这个快捷键我实验失败了).

LIBRARIES & CODE

litho-glide

为litho创建的Glide图片加载组件.

sample-googleassistant

Google Assistant API sample for Android Things.

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

推荐阅读更多精彩内容