1
我創建了一個viewpager
,而fragment
有一個RecyclerView
& viewholder
。爲什麼不能Observable.interval()取消訂閱?
@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);
});
}
我用Leakcanary
來找到片段的內存泄漏。當我滑動viewpager的片段會泄漏內存。我把這個站叫做adapter.onViewDetachedFromWindow
而且泄密者會通知很多次。我嘗試谷歌一些方法來解決我的問題,但這些失敗的工作。在這裏:
但使用'CompositeSubscription'不起作用。 'subscriprion.add()' – ilumer