【发布时间】:2017-03-18 10:16:39
【问题描述】:
匿名类持有对封闭类的引用。
在以下示例中,我创建了一个小型 Activity。在 onCreate 方法中,我只是在另一个 Thread 上添加一个计时器,添加一个 CompositeDisposable 并在 onDestroy 中清除它。
显然没有 CompositeDisposable,它会造成内存泄漏。使用 CompositeDisposable 它不会造成任何内存泄漏,但它是如何工作的?
RxJava 只是中断线程并将 null 放在每个回调上?你能提供一些在 RxJava 源代码中完成这项工作的行吗,我想它在 dispose 方法附近的某个地方。
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity";
private CompositeDisposable composite = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
composite.add(Flowable
.just(1)
.timer(90, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.subscribeWith(new DisposableSubscriber<Long>() {
@Override
public void onNext(Long aLong) { sayHello(); }
@Override
public void onError(Throwable t) { sayHello(); }
@Override
public void onComplete() { sayHello(); }
}));
}
@Override
protected void onDestroy() {
super.onDestroy();
composite.clear();
}
public void sayHello () { Log.w(TAG, "Hello everyone"); }
【问题讨论】:
标签: java android multithreading rx-java2