Android Weekly Notes Issue #238
Android Weekly Issue #238
January 1st, 2017
Android Weekly Issue #238
本期内容包括: Firebase发送Notification; RecyclerView的预取; 后台工作的实现方式讨论; RecyclerView分组数据; 跨平台应用工具Flutter介绍; Gradle依赖管理;
写测试的一些注意事项; Android Things应用搭建及一些思考; 如何搭建CI等.
ARTICLES & TUTORIALS
Mastering Firebase Notifications
用Firebase发通知:
- Console Notifications.
- 使用命令行, 发送curl命令.
FirebaseMessagingService在应用前台的时候处理通知.- 如果应用前后台的时候都需要处理, 则发送data而不是notification.
官方文档Firebase cloud-messaging.
RecyclerView Prefetch
作者研究了RecyclerView的渲染时间, 发现在滚动的时候很多的时间会花在新item的创建和bind上, 这样会推迟UI线程的其他工作, 还有RenderThread的后续工作, 如果超出了frame boundary, 就有可能会造成明显的卡顿.
而同时前一帧, UI线程可能处于空闲状态.
那么我们有没有可能以一种预取的方式, 把即将出现的View在提前的空闲阶段准备好呢?
pre-fetch的优化已经在Support Library v25加入, v25.1.0有进一步的加强. 如果你没有自定义LayoutManager, 也没有嵌套RecyclerView, 那么你升级support library之后就自动获得了这项优化. 其他两种情况你还需要调用一些方法.
你可以设置LayoutManager.setItemPrefetchEnabled()来对比开启和关闭预取功能前后的不同. 性能测量用Systrace和GPU profiling.
Things to consider before running background tasks
完成后台任务的几种方式和各自的优缺点分析.
- Thread.
- AsyncTask.
- Service.
- IntentService.
- Loader.
- JobService and JobScheduler. GCM Network Manager.
- RxJava.
Android RecyclerView - Grouping Data
作者展示了如何将RecyclerView中的数据分组展示, 在他的例子中是按照时间分组, 每一组开始是该组的时间占据一行.
其实主要是前期的数据处理, 首先创建一个HashMap, 分组依据作为key, 符合该依据的数据作为值存在对应key的value list里; 然后给日期和数据创建一个共同的基类, 把HashMap再重新展开成一个List, 里面穿插好数据. 最后用RecyclerView按照数据类型不同显示两种布局.
Flutter Intro
Flutter是一个Google推出的新工具, 用来构建跨平台的应用.
本文介绍了如何setup和创建一个Hello World.
How to add Gradle dependencies using ‘foreach’
一种管理依赖的方式, 把所有的依赖定义在同一个文件的不同分组里, 然后在每个module各自添加自己的分组即可.
Best practices to improve app engagement
如何提高app的用户参与度.
The Do’s and Don’ts of Writing Test cases in Android
作者分享了在写测试的时候需要注意的几点:
- 首先明确我们要测试的是什么, 预先条件是否满足, 如果是因为前置条件不满足, 那么并不是我们的测试本身失败了.
- 每个测试都是独立完成的, 测试的执行顺序不应该影响结果.
- 在测试中不要写条件语句. 条件语句是在实际代码中的, 每一个条件都应该对应一个单独的测试case.
- 测试应该不受外部因素影响, 比如server和网络. 因为如果因为这类原因测试失败了, 并不代表我们的代码有bug.
Making Rainbow HAT Work with the Android Things
一个Android Things应用.
Christmas Voice – Part 2
一个小应用, 录音, 做转换并播放.
Will Android do for the IoT what it did for mobile?
关于Android Things的一些看法.
Set up a CI server for Android dev
如何搭建Android项目的CI, (Ubuntu + Jenkins + SonarQube).
DESIGN
Material: Growth & communications
如何进行用户引导, feature发现和手势教育.
LIBRARIES & CODE
PanoramaImageView
一个ImageView, 在设备转动的时候可以自动滚动内容.
TextDecorator
可以给文字分段加上各种装饰, 下划线, 点击事件等.
Delightful-SQLBrite
一个示例应用, 展示SQLDelight和SQLBrite结合使用.
mainframer
一个远程build的脚本.
material-about-library
创建一个Material风格about页面的库.
android-snowfall
下雪View.
Android-ExpandIcon
展开/合上的上下箭头icon, 支持点击和手势滑动切换.
RxAnimations
Rx形式的动画库.
Android Weekly Notes Issue #238的更多相关文章
- 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的使用; ...
随机推荐
- 常见错误总结_1_对java类进行修改后,无法按修改的类型加载
1.这是因为没有run的原因,对类进行修改一定要run一遍 2.至于要不要重新tomcat部署,取决于你是修改了变量还是方法,拿不定的时候都重新加载一遍看看.
- leetcode处女作
闲来无事[真的吗?你确定→_→ 在leetcode上刷了一道题.费时一小时,也是醉了.谨以此文,纪念我的伟大成果.[呵呵 题目是找出非排序数组中缺少的最小正整数.要求时间复杂度O(n),空间复杂度为常 ...
- JAVA多线程解惑之多线程返回值
如果有人问题你,多线程可以有返回值吗?你怎么回答? 看下面例子,我定义了一个类实现了Callable 接口 public class MyCallable implements Callable< ...
- ORA-12011+ORA-06512–job执行失败问题
oracle库中的一个job,正常运行了一年多,因某种原因导致无法运行,系统尝试多次均失败之后下次执行时间就变成了 4000/1/1. 现导致job失败的问题已经解决,从新运行job时报 12011和 ...
- oracle 高版本导出低版本数据库并且导入到低版本数据的方法
第一步:sqlplus system/egis@orcl as sysdba; 进入sqlplus (输入管理员用户名/密码@数据库密码) 第二步: create directory dumpdir ...
- 暑假集训(2)第二弹 ----- The Suspects(POJ1611)
B - The Suspects Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:20000KB ...
- (poj) 1751 Highways
Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor ...
- 【BZOJ3884】【降幂大法】上帝与集合的正确用法
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元” ...
- Linux Shell脚本之自动修改IP
作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...
- 接口Interface
接口的定义 声明接口的方式与声明类的方式相似,但使用的关键字是interface,而不是class interface IMyInterface { // 接口成员 } 访问修饰符关键字public ...