本文共 3280 字,大约阅读时间需要 10 分钟。
在本次项目中,我们采用了Retrofit框架来处理网络请求,并结合RxJava进行数据处理和异步操作。以下是核心代码逻辑的实现细节及运行结果分析。
项目的主要类位于MainActivity中,以下是关键代码片段:
public class MainActivity extends AppCompatActivity { private static final String TAG = getClass().getSimpleName(); private CompositeDisposable mCompositeDisposable = new CompositeDisposable(); private Integer[] test_data = {1, 1, 2, 3, 4, 5, 2, 5, 3, 6, 4, 7, 7, 8, 9}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); test(); } private void test() { Observable observable1 = Observable.fromArray(test_data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .distinct() .subscribeWith(getObserver(0)); Observable observable2 = Observable.fromArray(test_data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .distinctUntilChanged() .subscribeWith(getObserver(1)); mCompositeDisposable.addAll(observable1, observable2); } private DisposableObserver getObserver(final int id) { return new DisposableObserver test()方法:这是数据处理的核心逻辑,通过两个可观ables分别处理数据。
observable1:
fromArray()创建一个基于test_data数组的可观ables。subscribeOn(Schedulers.io()):指定在IO线程上执行订阅。observeOn(AndroidSchedulers.mainThread()):指定在主线程上执行订阅。distinct():去除重复数据。subscribeWith(getObserver(0)):注册一个观察器,用于接收数据。observable2:
observable1类似,但使用了distinctUntilChanged(),表示在数据发生变化时才触发新的订阅。CompositeDisposable:用于管理多个可观ables的订阅,确保在onDestroy()时能够及时清理资源。
getObserver(int id):创建一个自定义的DisposableObserver,用于接收数据变化事件,日志中标记了不同的ID以区分不同观察器的输出。
运行结果如下:
05-18 10:57:55.069 4374-4374/zhangphil.app D/0MainActivity: #####开始#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0数据: 105-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####结束#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####开始#####05-18 10:57:55.070 4374-4374/zhangphil.app D/0数据: 2...
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####开始#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1数据: 105-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####结束#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####开始#####05-18 10:57:55.071 4374-4374/zhangphil.app D/1数据: 2...
运行结果表明,两个观察器分别处理了原始数据和去重后的数据。observable1使用了distinct()操作,直接去除重复数据;而observable2使用了distinctUntilChanged(),只有在数据发生变化时才触发新的订阅。
CompositeDisposable实现了对资源的自动管理,提升了代码的健壮性。这种设计方式既保证了代码的简洁性,又充分发挥了RxJava的优势,适用于需要处理大量数据并进行实时更新的场景。
转载地址:http://hugs.baihongyu.com/