là có anyway để nói java rx sử dụng các chủ đề hiện tại trong các chức năng quan sát? Tôi đang viết mã cho syncadapter android và tôi muốn kết quả được quan sát trong thread adapter đồng bộ và không nằm trong chủ đề chính.Làm thế nào để quan sátBên trong chuỗi gọi trong java rx?
Một ví dụ cuộc gọi mạng với Retrofit + RX Java trông giống như thế:
MyRetrofitApi.getInstance().getObjects()
.subscribeOn(Schedulers.io())
.observeOn(<current_thread>)
.subscribe(new Subscriber<Object>() {
//do stuff on the sync adapter thread
}
Tôi đã cố gắng sử dụng sử dụng
...
.observeOn(AndroidSchedulers.handlerThread(new Handler(Looper.myLooper())))
...
đó là cùng một cách android rx tạo ra lịch trình cho các chủ đề chính nhưng không hoạt động ngay khi tôi thay thế Looper.myLooper()
cho Looper.getMainLooper()
.
Tôi có thể sử dụng Schedulers.newThread() nhưng là mã đồng bộ phức tạp với nhiều cuộc gọi máy chủ. Tôi sẽ liên tục tạo chuỗi mới chỉ để kích hoạt cuộc gọi mạng mới tạo lại chủ đề mới để khởi chạy nhiều cuộc gọi mạng hơn . Có cách nào để làm việc này không? Hoặc là cách tiếp cận của tôi chính nó hoàn toàn sai?
Đây là một chút suy đoán, vì vậy tôi không gửi bài này như một Trả lời: Từ phiên bản 2.0-beta2 trở đi, Retrofit không đưa yêu cầu mạng vào một chuỗi khác nữa - xem tại đây: https://github.com/square/retrofit/commit/38ce2bee70342ac1ab08115d74802d3a54d85511 Vì vậy, nếu bạn đang sử dụng phiên bản hiện tại của Retrofit bạn sẽ có thể chỉ cần bỏ qua 'subscribeOn' và' observOn' hoàn toàn và chỉ ở lại trên thread adapter đồng bộ toàn bộ thời gian. Hoặc tôi đã hiểu sai câu hỏi của bạn và bạn muốn tạo chủ đề mới nhưng họ chỉ nên quay trở lại chủ đề mà bạn đã bắt đầu? –