アプリケーションをデバッグしているときに、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がある
eventSubject.asObservable()
.observeOn(Schedulers.io())
.doOnNext(new Action1<FollowEvent>() {
@Override
public void call(FollowEvent followEvent) {
if(followEvent != null)
doSomethingNice(followEvent);
}
})
.share();
します単純なPublishSubject。 RxJava 1.1.0と一緒にRxAndroid 1.1.0を使用しています。
これはなぜ起こっているのですか?
感謝を。あなたが示唆したように、私はsubscribeOnとobserveOnを試してみます。しかし、それをテストするにはしばらく時間がかかるかもしれません。 シェアについては、私はそれを必要とします。共有前のタスクはすべてのサブスクライバ間で共有される必要があります(結果はすべてのサブスクライバで同じです)。共有を削除すると、doOnNextがすべてのサブスクライバに対して呼び出されます(無意味です)。 isUnsubscribed()チェックの修正をありがとう。私はそれを完全に逃した。 – Avsector