相关疑难解决方法(0)

Android WorkManager中的异步工作者

谷歌最近宣布了新的WorkManager架构组件.通过WorkManagerdoWork()课堂上实现,可以很容易地安排同步工作,但是如果我想在后台进行一些异步工作呢?例如,我想使用Retrofit进行网络服务调用.我知道我可以发出同步网络请求,但它会阻塞线程并且感觉不对.有没有解决方案,或者目前还不支持?

android android-architecture-components android-workmanager

29
推荐指数
6
解决办法
1万
查看次数

Worker中的同步或异步Rxjava(来自WorkManager组件)什么是正确的选择?

我是新架构组件WorkManager的新手,我通过Retrofit和RxJava进行API调用.

我的用例是从后端获取新帖子,然后显示通知,并更新小部件.

所以来自Worker类的doWork()方法中的代码可能看起来像这样.

@NonNull
  @Override
  public Result doWork() {
    AppDependencies appDependencies = new AppDependencies((Application) getApplicationContext());
    Repository repository = appDependencies.getRepository();

    repository.getNewPosts()
        .flatMap(newPosts -> repository.inserPosts(newPosts).toObservable())
        .doOnError(Timber::e)
        //if success - > return  Result.SUCCESS,
        // -> show notification
        // -> update widget
        // error-> return Result.Failure
        .dontKnowWhatBestNextThing; //blocking or subscribing

    //if we reached here then Retry
    return Result.RETRY;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是在Worker类中使用RxJava代码的正确方法是什么,因为doWork()方法有一个返回值,所以我必须使Rx代码同步.

如果我使用非阻塞Rx方法,我怎样才能返回值(成功 - 失败 - 重试)

android rx-java2 android-architecture-components android-jetpack android-workmanager

18
推荐指数
2
解决办法
3193
查看次数

如何退订广播接收器中的RXjava呼叫

我正在使用RXJava2在广播接收器中发送电子邮件,我想知道何时应该退订该事件。代码基本上是:

        getSmsMmsObservable()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> Timber.e(throwable, "Error sending mail."))
            .map(smsMmsAddress1 -> {
                smsMmsAddress = smsMmsAddress1;
                return doInBackgroundSendEmail();
            })
            .map(stringSingle -> {
                mMsgResponse = stringSingle;
                this.done = true;
                return deleteFile();
            })
            .subscribe(success -> {
                if (success) {
                    Toast.makeText(context, "Message Status: " + mMsgResponse, Toast.LENGTH_LONG).show();
                }

            });
Run Code Online (Sandbox Code Playgroud)

我什么时候退订(接收器中没有onPause或onDestroy),我怎么知道onReceive何时完成?接收者通过清单进行注册。我考虑过做一个可观​​察的复合物,然后在subscribe()部分中将其处理。

    compositeDisposable.add(
    getSmsMmsObservable()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> Timber.e(throwable, "Error sending mail."))
            .map(smsMmsAddress1 -> {
                smsMmsAddress = smsMmsAddress1;
                return doInBackgroundSendEmail();
            })
            .map(stringSingle -> {
                mMsgResponse = stringSingle;
                this.done = true;
                return deleteFile();
            })
            .subscribe(success -> …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver rx-java2

2
推荐指数
1
解决办法
1049
查看次数