What’s New in the Android Studio Build System

使用 Worker 进行优化

下面的图上半部分是不是用 worker,下半部分使用 worker,因为并行的原因,使用 worker 之后明显快很多

但是显示总是残酷的,因为并不是所有的 task 都开启了 worker,比如下面的 task c 就是没有开启 worker 的最后,task b 只能等待 task c 完成

继续阅读“What’s New in the Android Studio Build System”

Groovy Closure 优化

使用 Closure 的时候因为不知道deleage 的对象是谁,所以没办法出现代码提示。在方法中可以这样写

static void compose(@DelegatesTo(DepAssemble.class) Closure closure) {
        def depAssemble = new DepAssemble(closure.owner)
        closure.delegate = depAssemble
        closure()
    }

加上 @DelegatesTo(DepAssemble.class) 即可,这样编辑器就知道怎么改 Dep 了

Android DiffUtils 同一个对象修改问题

Google 出了一个 DiffUtils 用于分发 Adapter 修改数据,很好用,但是有个问题,如果你的数据是来自网络的没问题,因为每次通过 Gson 来解析都是一个新的对象,对象是不一样的。因此是用 Diff 是没问题的。如果对象来自自己构建,当 UI 中修改的时候一般都是直接修改对象,当进行 Diff 的时候这个对象已经被修改了,没法进行比较。
这里有个办法来对付这种情况,Adapter 缓存的是 Vm 的 toString 对象,通过比较 toString 是否一样即可,这样就能直接对比分发。当然 HashCode 也是可以