好的,所以我是RxJava2的新手(呃,我也不知道RxJava),並且正在嘗試使用RxJava2和MVP結構開發Android應用程序。RxJava和長時間運行的監聽器
在該應用程序中,我正在對使用偵聽器的庫進行異步調用。 我使用「標準」setListener/registerListener方法設置偵聽器。
其中一種方法是返回值「realtime」 - >我調用我的庫的start()方法,然後在列表的每次修改時都會通知我的監聽器(當出現添加/刪除這幾項)。
我真的不知道如何使用RxJava來實現這種行爲,因爲監聽器是在發射器/訂戶的定義中訂閱的? 我應該在哪裏聲明聽衆?我應該在哪裏取消訂閱?我應該使用什麼對象?
我開始使用Nucleus開發,但可以切換到另一個樣板或自己做一個。
這是說明我的問題的一些僞代碼:
以前
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mMyLib.setListener(this);
mMyLib.startDiscovery();
}
@Override
public void itemListChanged(List<Dummy> items) {
// update the UI with the list items
}
@Override
protected void onDestroy() {
super.onDestroy();
mMyLib.setListener(null);
}
使用核,在我的演講
我應該在哪裏退訂,如果我想收到只要我的活動/演示者活着,就可以修改列表?我甚至使用正確的語法/對象?
private static final int REQUEST_ITEMS = 1;
private PublishSubject<Integer> pageRequests = PublishSubject.create();
...
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
restartableReplay(REQUEST_ITEMS,
() -> Observable.create(e ->
{
mMyLib.setListener(new MyLib.Listener() {
@Override
public void itemListChanged(List<Dummy> items) {
Log.d(TAG, "meh itemListChanged");
e.onNext(items);
e.onComplete();
}
});
mMyLib.startDiscovery();
}
)
,
MainFragment::onItems,
MainFragment::onNetworkError);
}
void request() {
start(REQUEST_ITEMS);
}
不錯的答案,謝謝:) 你認爲我最好擺脫Nucleus,並實施自己的「自己的MVP」(我發現了很多鍋爐板周圍)? 我會盡快編輯我的問題並提出修正建議。 – w00ly
好吧,我對Nucleus不太熟悉,它可能對MVP的使用有好處,只是當你使用它的重連功能來處理你的案例中的活動/片段功能 – yosriz