解决方案就是响应式编程,我们用响应式编程方式重新审视我们的 code refact 我们的代码。这里我们引用 RxAndroid 这个库来帮助我们解决一切的异步问题。我们来基于 RxAndroid 来实现响应式编程。
getUser 不在返回 User 对象,而是返回一个包裹了 User 的可观察者的对象。当 User 对象发生变化时我们就能第一时间接受更新消息。便于我们获取最新版的 User 对象。将 setName 和 setAge 返回一个 Completable 对象,也就是我们每次更新服务端的用户 name 和 age 时都会通过这个返回 Completable 得到是否成功,以及什时候成功的信息。
getUser 返回一个可观察对象,我们就可以在 UI 线程上观察他的动向。以便来及时更新界面。
然后通过 subscribeWith 来处理返回的 User 的对象,这里如果 RxAndroid 一些语法还不是很了解,我的理解就是subscribeWith中会把方法参数返回回去接收的是ResourceSubscriber,而ResourceSubscriber实现了Disposable接口所以,一般subscribeWith用到使用Rx请求接口的这种情况,订阅后把请求参数返回回去,可以添加到CompositeDisposable中方便绑定Activity生命周期取消。如果这里用 subscribe 而不是 subscribeWith 我们需要处理返回值 Disposable disposable = um.getUser... 然后在回收这个返回的 disposal 对象。
再看一看 setName 方法在更新后如何使用,我们需要访问远端服务器,为了不阻止主线程我们需要另起线程,对于线程处理和线程间通讯 RxAndroid 给我们提供全新的解决方案。
让后我们再回到主线程,处理返回的结果。
从这一点我们开始获取用户。
声明线程
容易处理错误信息
制定回调
与生命周期相关
1. 开始更新用户属性
2. 声明一个线程,让我们请求脱离主线程
3. 可以轻松处理请求的错误信息
4. 多个异步组合使用也相对简单。
5. 发起异步可以随时取消,可以和我们 Android
网友评论