我目前正在尝试在我的应用中实现rxandroid来更新适配器。 唯一的问题是,当我调用adapter.notiyDataSetChanged()时,应用程序会冻结,直到方法完成。
这是我到目前为止所做的:
private Subscriber<? super Object> subscriber = new Subscriber<Object>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
adapter.notifyDataSetChanged();
}
}
};
...
然后我在onResume
中进行订阅@Override
public void onResume() {
super.onResume();
MObservable.getInstance().getObservable()
.delay(2000,TimeUnit.MILLISECONDS,Schedulers.trampoline())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
并取消订阅onPause。
事件在一项服务中触发,该服务每分钟不同时间点亮该过程。
所以最后我的问题是:在调用notify方法时有没有办法不冻结应用程序?是在我的代码中的新线程上执行的通知,或者subscribeOn仍然在主线程上运行notify(正如我所怀疑的那样)。
提前谢谢
答案 0 :(得分:0)
问题可能在于Schedulers.trampoline()
片段。
来自Schedulers.trampoline()
的文档:
创建并返回一个调度程序,该调度程序对当前工作完成后要执行的当前线程进行排队。
在Android上,它表示来自主Thread
的当前Thread
。
删除此参数并查看Observable
的行为方式。