使用Retrolambda和RxJava编写更少的代码
Retrolambda 允许你在Android上使用lambda函数,如果你使用的是旧的Java版本(在Java 8之前). 让我们来看看它们的区别:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleClick(v));
}
});
使用Retrolambda的相同代码:
button.setOnClickListener(view -> handleClick(v));
RxJava 是轻量级Java虚拟机实现的 ReactiveX(Reactive Extensions). 它是一个单独的JAR库,支持Java 6或更高版本和基于jvm的语言. RxJava使用了一种不同于经典编程的方法,通过使用可观察序列来组合异步和基于事件的程序. 让我们来看看如何实现以下行为:
- 每隔10秒,向后端发出一个请求并获取汇率信息.
- 在出现错误的情况下,重试三次,每次尝试之间的延迟为三秒.
The code using RxJava:
mService = ServiceFactory.createRetrofitService (RatesService.class,
RatesService.SERVICE_ENDPOINT);
mRatesObservable = Observable.interval(0, 10, TimeUnit.SECONDS)
.flatMap(n ->
mService.getRates()
.retryWhen(new RetryWithDelay(3,3000))
.subscribeOn(Schedulers.io()));
mRatesObservable = mRatesUpdater.getRates().doOnNext(rates -> updateRates(rates));
// Stop requests
mRatesObservable.unsibscribe();
在不到十行代码中,我们实现了带有网络响应的自定义行为. 试着想象一下,使用经典Java代码需要多少行代码, using callbacks, services, and loaders.
Jack and Jill and Java 8
但是,对于Retrolambda,请记住它可能很快就会被弃用,因为 Jack and Jill,这是一个用于Android的实验性工具,可以在N开发人员预览版中获得 Java 8 features out-of-the-box. 密切关注谷歌关于杰克和吉尔的最新消息, 并在准备好后立即切换到本机实现.
Contributors
Dmitry Ryazantsev
Freelance Android Developer
Dmitry是一名有六年多经验的Android开发人员,他善于沟通,总是试图找到最适合项目的技术. 他在Git、Lua (Corona SDK)、RxJava、Dagger等方面经验丰富. 他与一个大型团队合作开发了Yandex浏览器,安装量超过1000万. 他还开发了自己的项目:一款250人的游戏,000个安装,并发布了其他几个应用程序.
Show More