首页 文章

Android RxJava2处理方向已更改

提问于
浏览
0

我是这个图书馆的新手,所以如果你有任何提示或建议,我们非常欢迎 . 我让RxJava2运行并执行longNetworkOperation假方法,流程如下:

  • 创建observable:Observable.just("str1")

  • 更改执行线程:.subscribeOn(Schedulers.newThread())

  • 实现将执行LongRunningProcess的map接口:

.map(new Function<String, String>() { 
     @Override
     public String apply(String cad){ // cad is the input value
            Log.d(TAG,"long operation in thread: "+Thread.currentThread().getName()); //output thread name
            return " longNetworkOperation result => "+doLongNetworkOperation(); //here we do the background operations
            }})
  • 在主线程中获取结果:.observeOn(AndroidSchedulers.mainThread())

  • 添加获得结果通知的观察者:.subscribe(observer);

观察员:

Observer observer = new Observer() {
    @Override
    public void onSubscribe(Disposable d) { Log.d(TAG,"onSubscribe, thread name >> "+Thread.currentThread().getName()); }

    @Override
    public void onNext(Object value) { Log.d(TAG,"on next, input value:<<"+value.toString()+">>  thread name >>"+Thread.currentThread().getName());}

    @Override
    public void onError(Throwable e) { Log.d(TAG,"error >>"+e.toString()); }

    @Override
    public void onComplete() {
        Log.d(TAG,"onCompleted  thread name >> "+Thread.currentThread().getName());
        tvRxJava = (TextView) findViewById(R.id.tv_rxjava); //update the reference of tvRxJava.
        tvRxJava.setText("process executed..."); //this line does not change the value of the TextView tvRxJava.
    }
};

这样工作正常,没有设备旋转,但如果在doLongNetworkOperation在后台运行时旋转设备,TextView tvRxJava不会更新值 . 甚至没有新的注射 .

tvRxJava = (TextView) findViewById(R.id.tv_rxjava);

你如何用RxJava2管理android中的方向变化?

这是我的gradle dep:

compile 'io.reactivex.rxjava2:rxjava:2.0.5'//rxjava2
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' //rxjava2 for android

1 回答

  • 1

    通常我想为observable提供缓存机制,以便在配置更改(强制重新创建娱乐)的情况下再次返回结果 . 我正在分享两篇非常好的文章,它会给你非常清晰的图片,以解决这个问题 .

    我目前正在我的应用程序中遵循第二种方法 .

相关问题