尽管并没有与活动生命周期紧密结合,我们仍然需要采取某种方式以发布应用模型的当前状态,从而将其显示在某些特定位置(在活动中)。在这方面,LiveData 能够发挥良好作用。
LiveData类似于对RxJava BehaviorSubject的二次创造……其拥有一项observable可变值。其最重要的差异体现在订阅方式以及随后在MainActivity当中进行查看的方式上。
不过LiveData也不具备像Observable那样强大的可组合运算符。大家可以查看LiveData提供的部分简单转换信息。
不过LiveData也不具备像Observable那样强大的可组合运算符。大家可以点击此处查看LiveData提供的部分简单转换信息。
另一项区别在于,LiveData仅适用于Android,但RxJava主题则更具普适性; 因此我们可以利用常规非Android JUnit对后者进行轻松测 试。
最后一项不同是,LiveData具有“生命周期意识”——我将在下一篇介绍MainActivity类的博文当中对此作出详尽探讨。
在本示例中,我们选择使用MutableLiveData:各LiveData对象允许直接向其中随意添加新值。应用state由4个LiveData对象负责体现:city、charts、loading以及message。其中最重要的自然是charts:LiveData>对象,其代表着需要显示的当前图表清单。
所有会引发应用状态变化以及响应用户操作的任务皆由ACTOR负责执行。
Actors 非常强大,我将在下一篇博文中进行具体解释。
总结
我们已经为主actor作好了一切筹备。如果大家认真查看actor代码内容,那么即使您并不了解coroutines或者actors理论,应该也能够看懂其工作原理。虽然只有寥寥数行,但其中实际包含着本款应用的全部重要业务逻辑。最值得强调的就是我们调用 suspendable函数的位置(由绿线加灰色箭头所指定的部分)。第一个位置为suspendable点,即随用户操作进行迭代的部分; 第二个位置则为网络调用。归功于coroutines,这里的内容更近似于同步阻塞代码,但实际上却并不会拥塞该线程。
请大家期待我的下一篇博文,届时我将详细讲解关于actors与channels的一切。