📅  最后修改于: 2023-12-03 15:04:58.239000             🧑  作者: Mango
RxJava是一个基于观察者模式的异步编程框架,能够简洁地处理异步事件流。
CompositeDisposable是RxJava中的一个工具类,用于管理订阅关系。当程序中出现大量的订阅关系时,会导致内存占用过多,并可能出现内存泄漏。使用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管理订阅关系,防止出现内存泄漏。最后在程序退出时清空所有订阅关系。