我是这个图书馆的新手,所以如果你有任何提示或建议,我们非常欢迎 . 我让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 回答
通常我想为observable提供缓存机制,以便在配置更改(强制重新创建娱乐)的情况下再次返回结果 . 我正在分享两篇非常好的文章,它会给你非常清晰的图片,以解决这个问题 .
First
Second
我目前正在我的应用程序中遵循第二种方法 .