在Android服务中处理RxJava2 Observable

时间:2017-09-05 08:21:07

标签: android service widget rx-java2 paper-android

普通:

我有一个Android小部件,即使应用程序被杀死也必须更新。所以我有一个Android服务来处理这个工作。

如果更新数据库中的数据,则更新窗口小部件ui。此数据可能会被其他触发器更新。我使用数据库值中的Observable映射了widget ui update。

数据库是Paper https://github.com/pilgr/Paper,我用它来处理它RxJava2包装器https://github.com/pakoito/RxPaper2

代码:

以下是该服务的简化代码。

public class WidgetService extends Service {

    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();
    private WidgetMager mWidgetManager = new WidgetManager();

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        reactOnNotification();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        AppLog.v(this, "Destroy service.");
        clearSubscriptions();
    }


    private void reactOnNotification() {
        mCompositeDisposable.add(
                RxPaperBook
                        .with("RT")
                        .observe("SINGLE", RTAQI.class, BackpressureStrategy.LATEST)
                        .toObservable()
                        .doOnNext(value -> mWidgetManager.update(value))
                        .subscribeWith(new GenericSubscriber2<>("Notif"))
        );


        mCompositeDisposable.add(
                Observable
                        .interval(1, TimeUnit.SECONDS)
                        .map(aLong -> (RTAQI) Paper.book("RT").read("SINGLE"))
                        .doOnNext(value -> mWidgetManager.update(value))
                        .subscribeWith(new GenericSubscriber2<>("Pulling"))

        );
    }

    private void clearSubscriptions() {
        if (mCompositeDisposable != null) {
            mCompositeDisposable.clear();
        }
        mCompositeDisposable = new CompositeDisposable();
    }
}

widgetManager使用远程视图更新小部件。

问题:

对于该示例,我只放了2个小部件更新机制:

  • 1每1秒拉一次(有效但不干净且高效)用纸
  • Rx Stream的
  • 1意图使用RxPaper2高效但不起作用。不会触发观察。 (这样的Observable在使用mainTread的应用程序中正常工作)

我预计会遇到subscribeOn的问题,我真的不知道如何在服务中处理这个问题。欢迎任何帮助。

0 个答案:

没有答案