簡體   English   中英

RxJava2旋轉后兩次調用onNext Consumer

[英]RxJava2 call onNext Consumer twice after rotation

有一個非常簡單的Activity其中我嘗試學習rx

public class MainActivity extends AppCompatActivity {

    private SampleApi sampleApi;

    private Observable<Post> postObservable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Timber.plant(new Timber.DebugTree());

        sampleApi = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com")
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(buildOkHttpClient())
                .build()
                .create(SampleApi.class);

        findViewById(R.id.subscribe1).setOnClickListener(
                target -> sampleApi.getPost(1)
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeOn(Schedulers.io())
                        .subscribe(this::handleResponse)
        );
    }

    @NonNull
    private OkHttpClient buildOkHttpClient() {
        // build some okhttp3 client here
    }

    private void handleResponse(Post post) {
        Timber.i("handleResponse: " + post.id);
    }
}

一切正常,但是當我旋轉設備(從縱向到橫向)並單擊該按鈕后,我的handleResponse方法被調用了兩次。 因此,如果我將設備旋轉兩次,則handleResponse被調用三次,以此類推(網絡請求始終為單個)。

無法理解問題。


更新資料

我了解我的問題,這與rx無關,與Timber無關,當我旋轉屏幕時,每次都會重新創建活動,並且TimberForest添加新的Tree 因此,當我記錄某些內容時,它會輸出兩次。

這是因為活動被銷毀時您不會取消訂閱。

主要活動:

Disposable postDisposable;

onCreate:

findViewById(R.id.subscribe1).setOnClickListener(....

    ....

    if (postDisposable != null) {
        postDisposable.dispose(); 
    }

    postDisposable = sampleApi.getPost(1)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(this::handleResponse, throwable -> Log.e("TAG", "Error", throwable));

onDestroy:

if (postDisposable != null) {
    postDisposable.dispose();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM