[英]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
無關,當我旋轉屏幕時,每次都會重新創建活動,並且Timber
向Forest
添加新的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.