首页 安卓& Kotlin Books 高级Android应用架构

6
rxjava. 由Aldo Olivares撰写

在本章中,您将无法编写任何代码。相反,您将了解Java最受欢迎的开源库之一的理论: rxjava..

你可能会想知道:为什么要了解rxjava,如果这是在kotlin写的书?

即使Rxjava是一个Java库,它也会与您的Kotlin代码合作。这是因为Kotlin设计有内置的Java互操作性。

您可能也想知道:我以为这是一本关于建筑模式的书!

TRUE,这是一本关于Android的体系结构模式的书,但rxjava利用您在本书中看到的大多数架构模式中存在的重要元素,例如可观察到和无功编程。此外,rxjava很受欢迎,并且很多源代码,您将在线使用rxjava。因此,重要的是您了解该库的工作原理,至少在高度上。

什么是观察者模式?

在潜入rxjava世界之前,你理解的是至关重要的 观察者模式。当大多数Android开发人员听到这个词模式时,他们立即考虑 MVC, MVP.MVVM。实际上,这些不是技术上的模式;他们是 复合图案.

什么是复合模式?

复合图案是由多种图案组成的图案。换句话说,模式的模式。

观察者模式如何工作?

观察者模式有助于您的对象知道什么时候发生某些事情 - 例如数据库更新或网络响应 - 所以它们可以相应地反应。

了解rxjava

rxjava是Java和Android的开源库,可帮助您创建无功代码。它提供了为可观察/观察者回调实现观察者模式,并为您提供一系列操作员,允许您处理基于异步和基于事件的程序。

重复编程

rxjava有助于您创建无功代码。在必要的编程中,您通常会评估表达式 线性的 或逐行。如果要计算矩形的区域,则代码将如下所示:

var width = 2
var height = 3
var area = width * height // z is 6
button.setOnClickListener {
  //Some code
}

观察活动

rxjava. implements the Observer pattern via two main interfaces: ObservableObserver. One of the most important methods in the Observable interface is subscribe().

创造一个 Observable

There are many libraries in Java that help you create an Observable from almost any type of event. But sometimes it’s better to create your own. You can create an Observable using Observable.create(). Here’s its signature:

Observable<T> create(ObservableOnSubscribe<T> source)
public interface ObservableOnSubscribe<T> {
  void subscribe(ObservableEmitter<T> e) throws Exception;
}
public interface Emitter<T> {
  void onNext(T value);
  void onError(Throwable error);
  void onComplete();
}
//1
fun createYoutuber(): Observable<String>{
  //2  
  return Observable.create{emitter ->
    //3                       
    emitter.onNext("How to breed llamas")
  }
}
//1
private fun createSubscriber(): Observer<String> {
  //2
  return object : Observer<String> {
    //3
    override fun onSubscribe(d: Disposable) {
      Log.d(TAG, " Im subscribed")
    }
     //4
    override fun onNext(value: String) {
      Log.d(TAG, "New Video : $value")
    }
    //5
    override fun onError(e: Throwable) {
      //Define onError() Action
    }
    //6
    override fun onComplete() {
      //Define onComplete() Action
    }
  }
}
createYoutuber().subscribe(createSubscriber())
D/MainActivity: Im subscribed
D/MainActivity: New Video : How to breed llamas
fun createYoutuber(): Observable<String>{
  return Observable.just("How to breed Llamas")
}
D/MainActivity: Im subscribed
D/MainActivity: New Video : How to breed llamas

异步任务

One common misconception about RxJava is that the tasks executed with this library are executed on a background thread. By default, RxJava does all of the tasks in the same thread from which it was called. For an Android app, this means that an Observable will usually emit all its data using the UI thread unless told otherwise.

createYoutuber()
    // Subscribe on a background thread
    .subscribeOn(Schedulers.io())
    // Observe on the main thread
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(createSubscriber())
D/MainActivity: Im subscribed
D/MainActivity: New Video : How to breed llamas

运营商

YouTube is great, but there are other video streaming services available. Perhaps you’d like to subscribe to more than just a YouTube Observable, but apply the same logic to each.

fun createNetflixChannel(): Observable<String> {
  return Observable.just("House of Cards")
}
val subscriber = createSubscriber()
createYoutuber()
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(subscriber)

createNetflixChannel()
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread())
   .subscribe(subscriber)
Observable.merge(createYoutuber(), createNetflixChannel())
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(createSubscriber())
D/MainActivity:  Im subscribed
D/MainActivity:  Im subscribed
D/MainActivity: New Video : How to breed Llamas
D/MainActivity: New Video : House of Cards

经常没有被问到rxjava问题

问:我可以使用通常的侦听器/回调而不是rxjava吗?

关键点

  • 观察者模式有助于您的对象了解有趣的事情时,它们可以相应地反应。
  • 观察者图案定义了观察者和观察者之间的一对一关系。
  • An Observable is an object that emits notifications about its state to one or more Observers.
  • 无功编程是一个声明性编程范例,您可以动态地对变化作出反应。
  • rxjava是一个用于Java和Android的开源库,可帮助您创建无功代码。它受到功能规划的重大启发。
  • rxjava. implements the Observer pattern with two main interfaces: ObservableObserver.
  • rxjava在调用它的同一线程上执行所有任务。

然后去哪儿?

rxjava是一个强大而流行的库,可让您在android项目中撰写反应性代码。即使它是在Java中编写的,它也是100%与Kotlin互操作。如果您想了解有关Rxjava的更多信息,请查看网站上的伊琳娜伽拉 Kotlin rxandroid的反应性编程 Raywenderlich.com/384-reactrive-programming-with-rxandroid-in-kotlin-an-antroduction.

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。