Ich habe eine viewpager
erstellt und die fragment
hat eine RecyclerView
& viewholder
.Warum kann Observable.interval() nicht abbestellen?
@Override
public void bindModel(GankInfo item) {
super.bindModel(item);
picViewPager.setOnTouchListener(((v, event) -> {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:{
stopPlay();
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:{
startPlay();
break;
}
}
return false;
}));
}
@Override
public void onAttach() {
super.onAttach();
startPlay();
}
@Override
public void onDetach() {
super.onDetach();
stopPlay();
}
private void stopPlay(){
subscription.unsubscribe();
}
private void startPlay(){
subscription =
Observable.interval(3, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
int currentPosition = picViewPager.getCurrentItem();
currentPosition++;
picViewPager.setCurrentItem(currentPosition==picViewPager.getAdapter().getCount()?0:currentPosition);
});
}
I verwendet Leakcanary
den Speicherverlust mit dem Fragment zu finden. Wenn ich den Viewpager wische, verliert das Fragment Speicher. Ich rufe diesen Stop mit dem adapter.onViewDetachedFromWindow
an und Leckcanary wird immer viele Male benachrichtigen. Ich versuche, einige Wege zu googlen, um mein Problem zu lösen, aber diese funktionieren nicht. Hier:
aber what 'CompositeSubscription' funktioniert nicht. 'subscriprion.add()' – ilumer