2017-06-08 2 views
0

私はこのライブラリでは新しいので、ヒントやご提案があれば歓迎する以上です。 は、私が実行しているとlongNetworkOperation偽の方法を実行RxJava2を得た、流れはこれです:Android RxJava2ハンドルオリエンテーションが変更されました

  • 観測可能作成します。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 
+0

問題は実際にRxJavaではなく、デバイスの向きが変更されたときのデフォルトのアクションは、アクティビティを破棄して再作成することです。新しく作成されたアクティビティのコピーは、古いアクティビティで作成したRxJavaリクエストからデータを受け取る方法がありません。マニフェストに適切なオプションを設定して、アクティビティがオリエンテーションの変更自体を処理できるようにすることで、アクティビティが破棄されるのを防ぐことで、これを回避できます。 – Clyde

答えて

1

通常、私は(活動レクリエーションを強制的に)構成変更の場合には、再び結果を取り戻すためには、観察用のキャッシュメカニズムを持っていると思います。 私は、この問題を解決するために非常に鮮明な画像を与える2つの非常に良い記事を共有しています。

  1. First
  2. Second

私は現在、自分のアプリケーションに第二のアプローチを以下しています。

+0

あなたは正しいです..シングルトンは私にこの問題を解決することを可能にします.. さらにMVPパターンで...私はちょうどRxJavaが他のより洗練されたソリューションを持っていると思っていました。 ありがとうございます。 – LearningCharlito

関連する問題