在新线程rxandroid中执行订阅者

时间:2016-11-09 15:36:35

标签: android multithreading rx-android notifydatasetchanged

我目前正在尝试在我的应用中实现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(正如我所怀疑的那样)。

提前谢谢

1 个答案:

答案 0 :(得分:0)

问题可能在于Schedulers.trampoline()片段。

来自Schedulers.trampoline()的文档:

  

创建并返回一个调度程序,该调度程序对当前工作完成后要执行的当前线程进行排队。

在Android上,它表示来自主Thread的当前Thread

删除此参数并查看Observable的行为方式。

相关问题