6
有時當我調試我的應用程序時,我遇到了RxCachedThreadScheduler-1中的InterruptedException。這裏的痕跡: 在Android上進行調試時RxJava緩存線程中的InterruptedException
Fatal Exception: java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1991)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2025)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1048)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:776)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
我有我訂閱我觀察到這樣的自定義視圖:
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
sub = FollowHandler.getInstance().getObservable()
.filter(new Func1<FollowEvent, Boolean>() {
@Override
public Boolean call(FollowEvent followEvent) {
if(followEvent == null || followEvent.user == null
|| user == null)
return false;
return followEvent.user.id == user.id;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<FollowEvent>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {}
@Override
public void onNext(FollowEvent followEvent) {
reactToThisNiceEvent(followEvent);
}
});
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if(sub != null)
sub.unsubscribe();
}
這裏的觀察到:
其中eventSubject.asObservable()
.observeOn(Schedulers.io())
.doOnNext(new Action1<FollowEvent>() {
@Override
public void call(FollowEvent followEvent) {
if(followEvent != null)
doSomethingNice(followEvent);
}
})
.share();
eventSubject是簡單的PublishSubject。 我使用RxAndroid 1.1.0和RxJava 1.1.0。
有誰知道爲什麼會發生這種情況?
感謝您的回答。我會嘗試按照你的建議去做subscribeOn和observeOn。然而,我可能需要一段時間來測試它。 關於分享,我確實需要它。因爲共享之前的任務必須在所有訂戶之間共享(並且所有訂戶的結果都相同)。如果我刪除共享,則將爲所有訂戶調用doOnNext(這是毫無意義的)。 並感謝更正isUnsubscribed()檢查。我完全錯過了。 – Avsector