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.
- 代码分析工具.
- PMD.
- FindBugs.
- Infer.
- 这里可以用Google提供的Java Style Guide.
- 生成文档.
- 用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
是一个无人居住的类型, 在运行时没有值会是这个类型, 它也是其他类的子类.
当作为返回值时, Unit
和Nothing
到底有什么区别呢?
举例来说明:
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.
Android Weekly Notes Issue #257的更多相关文章
- Android Weekly Notes Issue #230
Android Weekly Notes Issue #230 November 6th, 2016 Android Weekly Issue #230. Android Weekly笔记, 本期内容 ...
- Android Weekly Notes Issue #227
Android Weekly Issue #227 October 16th, 2016 Android Weekly Issue #227. 本期内容包括: Google的Mobile Vision ...
- Android Weekly Notes Issue #237
Android Weekly Issue #237 December 25th, 2016 Android Weekly Issue #237 这是本年的最后一篇issue, 感谢大家. 本期内容包括 ...
- Android Weekly Notes Issue #229
Android Weekly Issue #229 October 30th, 2016 Android Weekly Issue #229 Android Weekly笔记, 本期内容包括: 性能库 ...
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- Android Weekly Notes Issue #236
Android Weekly Issue #236 December 18th, 2016 Android Weekly Issue #236 本期内容包括: Google的物联网平台Android ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...
- Android Weekly Notes Issue #234
Android Weekly Issue #234 December 4th, 2016 Android Weekly Issue #234 本期内容包括: ConstraintLayout的使用; ...
随机推荐
- linux df -h卡成狗
linux执行df -h命令,直接卡在,很久没有任何动静 strace df -h跟踪命令执行,查看卡在那里 还有可能就是重做系统吧,检测下内存条是不是坏了等 http://blog.51cto.co ...
- htop简介
htop可谓top的升级版,top不可以鼠标操作,但是htop可以使用鼠标操作 启动方式:命令行下输入htop直接启动,启动后的界面如图所示 操作:可以使用上下左右方向键进行移动查看.可以使用鼠标点击 ...
- AlphaGo GITHUB
AlphaGo GITHUB https://github.com/Rochester-NRT/AlphaGo
- 记C++课程设计--学生信息管理系统
C++课程设计--学生信息管理系统 ...
- MySQL之慢查询-删除慢查询日志
一.环境 OS:CentOS release 5.8(64位) DB:MySQL5.5.17 二.操作 直接通过命令 rm -f 删除了慢查询日志 三.出现故障 慢查询日志没有自己主 ...
- cocos2d-x-lua基础系列教程五(lua单例)
lua-单例 function newAccount(initlizedBanlance) local self = {balance = initlizedBanlance} local show ...
- 【Sprint3冲刺之前】软件开发计划书
TD校园助手软件开发计划书 1.引言 1.1 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,同时便于老师和其他同学了解我们的项 ...
- 产生N个不重复的随机数的快速算法
//seed array ,,,,,,,,,}; //随机数个数 ; //结果存放在里面 ]; ; i < N; i++) { //从剩下的随机数里生成 , startArray.length ...
- 记一次Oracle数据故障排除过程
前天在Oracle生产环境中,自己的存储过程运行时间超过1小时,怀疑是其他job运行时间过长推迟了自己job运行时间,遂重新跑job,发现同测试环境的确不同,运行了25分钟. 之后准备在测试环境中制造 ...
- 利用expload 分割字符串 变成数组
#admin_abc去掉下划线 =>>变成 array('admin','abc') $table_Name=explode('_', $table_Name);