首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RxAndroid 来管理应用状态(1)

指令式编程现在总是被拿出来和其他 OOP 呀 、FP 还是响应式编程进行对比以突出后者的优势。不过指令式编程还是比较好理解的,不过前提是你的应用足够简单,一切都在可控的范围内。这样你可以用同步的方式来写整个系统。不过当今的世界不是这样的,整个世界都是不确定的,当然变化背后可能是确定的。

因为这些种种的不确定性,为应付这些不确定性响应式编程显得至关重要。我们实例还是从简单开始,通过简单来映射这个复杂的世界。定义一个 userManager 接口,提供设置用户姓名和年龄以及获取用户的一系列方法。这里实例我们并没有脱离实际。

然后通过 UserManager 可以获取用户对象来做一些事,判断用户状态。我们可以用 set 方法来更改用户属性。

获取数据来更新用户属性,数据的来源可能是文件也可能是通过对服务端的请求来获取数据。所以获取数据的过程以及是否能获取到数据都是不确定的。在没成功更新用户属性我们就急于打印或获取用户信息势必会出问题。都知道在 javascript 我们可以写 callback 来进行异步获取后更新用户信息。

在 Java 中我们通过匿名类实现 callback。runnable 开在其他线程发起请求获取数据。

同样我们也可以定义接口,提供 success 和 error 处理的方法来处理请求的状态。不过这样做下来,一两个属性还好,如果多了我们怎么处理。

通过定义接口我们可以实现对获取数据异步设置 user 的 name 属性,可以处理设置数据的成功和失败的情况。我们似乎找到了 solution。

这里定义两个属性,我们就需要

更糟糕的是如果我们获取数据是有先后,例如我们获取信息需要先获取用户 id ,也就是我们请求是有先后顺序的。这样层层嵌套不仅麻烦而是无法控制。尤其当我们状态改变了,更是无法控制了。例如当我们旋转手机,配置发生改变我们请求。

如果我们将两个异步设置属性组合在一起,这样就是超出我们控制。如果系统这样复杂下去,code 就像脱缰怪兽无法控制。

如果我们应用是跑在 Android 系统中,又增加问题的复杂性。我们获取用户信息后将其显示在android 界面,场景是我们更改用户名称,更改后发起请求更新服务端用户的属性,然后成功 update 用户信息后更新 android 界面的信息。

当请求返回时我们需要判断状态,是否我们已经离开这个 activity 或者选择了手机。

成功更新服务端的数据,请求是异步跑在非 UI 现成,返回后我们还需要返回 UI 线程更新界面。

在 Android 应用中我们还需在成功获取数据后切换回主线程,这一切一切的麻烦我都可以用 RxAndroid 来解决。

我们的移动设备与服务端是异步的,发起请求后,就只有等待了,等待反馈,可能因为不稳定的网络,我们可能无法收到服务端的反馈,也可以可能收到服务端返回无错误信息,因为这里没有满足我们的数据。

设配也会读取存储在本地数据,其实这也是异步的,我们要找文件是否还存在,存储的硬件介子是否破损,这些不确定的因素都会决定我们这次访问文件是否成功。

我们每一次点击,每一次滑动也都是异步请求。相比于上面提到的异步事件,这个异步事件可能容易被大家被忽略。

其实我们同 Android 系统打交道就是异步的,因为 Android 本身就是善变的。我们对 android 请求,可能由于权限问题无法得到回应。

以上所有这些异步问题,都会通过我们的 code 来处理,developer 可能会显得力不从心。我们需要一种解决方案来帮助处理这么多的不确定性。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190112B0RNS000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券