📜  RxJava-使用CompositeDisposable(1)

📅  最后修改于: 2023-12-03 15:04:58.239000             🧑  作者: Mango

RxJava-使用CompositeDisposable

简介

RxJava是一个基于观察者模式的异步编程框架,能够简洁地处理异步事件流。

CompositeDisposable是RxJava中的一个工具类,用于管理订阅关系。当程序中出现大量的订阅关系时,会导致内存占用过多,并可能出现内存泄漏。使用CompositeDisposable可以避免这些问题,同时也使得取消订阅更加方便。

使用
创建CompositeDisposable
private CompositeDisposable compositeDisposable = new CompositeDisposable();

在程序中声明一个CompositeDisposable对象,用于管理订阅关系。

添加订阅
compositeDisposable.add(Observable.interval(1, TimeUnit.SECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.io())
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Exception {
                Log.d(TAG, "onNext: " + aLong);
            }
        }));

在创建Observable时,使用subscribe()方法添加订阅关系,并将返回的Disposable对象添加到CompositeDisposable中。可以添加多个订阅。

取消订阅
@Override
protected void onDestroy() {
    super.onDestroy();
    compositeDisposable.clear();
}

在程序退出或者不需要订阅关系时,使用clear()方法取消所有订阅关系。

示例
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private TextView textView;
    private CompositeDisposable compositeDisposable = new CompositeDisposable();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        compositeDisposable.add(Observable.interval(1, TimeUnit.SECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        Log.d(TAG, "onNext: " + aLong);
                        textView.setText("Count: " + aLong);
                    }
                }));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        compositeDisposable.clear();
    }
}

在这个示例中,创建了一个Observable对象,每隔一秒钟发送一个long类型的数字。在序列式订阅过程中,将数字显示在TextView上。使用CompositeDisposable管理订阅关系,防止出现内存泄漏。最后在程序退出时清空所有订阅关系。