2016-05-03 Piasy
从最初 OkBuck 发布时宣称 BUCK 与 RetroLambda 不兼容只能忍痛割爱(lambda),到 BUCK 维护者之一联系我声称 BUCK 可以编译 Java 8 结果遇到编译错误未解,到昨晚终于成功让 BUCK 与 RetroLambda 出双入对,时隔大半年终于臻至完美,怎一个爽字了得!如果你还不了解什么是 BUCK,可以参考我的两篇文章 OkBuck, underneath the hood{:target="_blank"},手把手OkBuck教程:应用到AndroidTDDBootStrap项目(续){:target="_blank"},以及 BUCK 官方文档{:target="_blank"}。 继续阅读 »
2016-04-11 Piasy
Dagger2{:target="_blank"} 已经在项目中用了一年多了,之前曾看到过一篇文章{:target="_blank"},里面说 Scope 注解可以保证依赖在每个 component 生命周期内的单例性,即局部单例。但上周一天和同事一起看生成的 injector 代码,却并未发现这一点是怎么做到的,于是得出“单例性需要 module 的 provide 方法实现来保证”的结论。但我依然对此不甚放心,决定仔细实验一番。测试代码可以在 Github 获取{:target="_blank"}。 继续阅读 »
2016-04-07 Piasy
一直以来,我们都在各种场合、各种文章中看到避免使用 RelativeLayout、避免使用过多的 layout 嵌套,因为它们存在很大的性能开销。开发的过程中也确实在留意这一点,然而每每编写 layout 文件时,都会怀疑,这样或者那样,到底会变快,还是变慢?本文就针对简单的 layout 和复杂的 layout,是否使用 RelativeLayout 的性能进行了测试,此外,还对最近很火的 FlexLayout{:target="_blank"} 也进行了测试。测试代码和测试结果数据都可以在 Github 获取{:target="_blank"}。 继续阅读 »
2016-04-04 Piasy
本文继上篇 ItemDecoration{:target="_blank"} 之后,是深入理解 RecyclerView 系列的第二篇,关注于 ItemAnimator,主要是分析 RecyclerView Animators{:target="_blank"} 这个库的原理,然后总结如何自己编写自定义的 ItemAnimator。本文涉及到的完整代码可以在 Github 获取{:target="_blank"}。 继续阅读 »
2016-04-03 Piasy
开发安卓APP的过程中,肯定有不少人遇见过 Activity Not Found 错误和 Activity State Loss 错误,前者是由于启动的目标 intent 对应的 activity 不存在,后者则是由于在 activity onSaveInstanceState 函数被调用之后进行了 fragment transaction,关于后者有一篇文章{:target="_blank"}总结得非常到位,这一篇译文{:target="_blank"}翻译得也还不错,建议看看。本文则主要介绍我的一个开源库 SafelyAndroid{:target="_blank"},其中整合了解决这两类问题的最佳实践,让我们一起利用它打造鲁棒 继续阅读 »
2016-03-31 Piasy
去年的一篇文章{:target="_blank"}总结了一下深浅拷贝,Immutable 和 unmodifiable 这三个概念,今天再看看 Java 的深浅拷贝。 继续阅读 »
2016-03-26 Piasy
RecyclerView 已经推出了一年多了,日常开发中也已经彻底从 ListView 迁移到了 RecyclerView,但前两天有人在一个安卓群里面问了个关于最顶上的 item view 加蒙层的问题,被人用 ItemDecoration 完美解决。此时我发现自己对 RecyclerView 的使用一直太过基本,更深入更强大的功能完全没有涉及,像 ItemDecoration, ItemAnimator, SmoothScroller, OnItemTouchListener, LayoutManager 之类,以及 RecyclerView 重用 view 的原理。网上也有很多对 RecyclerView 使用的讲解博客,要么 继续阅读 »
2016-03-19 Piasy
最近一直在补充framework以及更深入的安卓开发知识,看到老罗的博客以及developer文档关于task, launchMode, intent flag的分析说明之后,不禁想要自己动手测试一下,验证他们所说的是否属实,个人认为当属目前最全面的测试与总结了(欢迎补充与质疑),完整代码可以在Github获取。 继续阅读 »
2016-03-16 Piasy
今天代码写着写着就莫名闪退了,手机也没有“程序停止运行”的提示,logcat也没有看到蓝色的调用栈log,这样的闪退最是蛋疼了,还好必现。复现几次之后,终于从logcat中看到了一行可疑的log:A/Looper: Could not create epoll instance. errno=24,看起来又是在native层闪退了。本文就把这个问题的分析解决过程记录了下来。 继续阅读 »
2016-03-13 Piasy
安卓开发过程中测试的编写是一个公认的痛点,本文总结了我在AndroidTDDBootStrap工程中配置Espresso测试所遇到的坑,例如神秘报错android.content.res.Resources$NotFoundException和java.util.zip.ZipException: duplicate entry,以及对dagger,mock网络请求的实践,目测应该是目前最全面的指南了 :) 本文涉及的完整代码可以在Github: AndroidTDDBootStrap获取。 继续阅读 »