使用了一点RxJava并且可以看到它的优点。一个是当onStop()
中的订阅被取消订阅时,匿名内部类被垃圾收集。
对RxJava不熟悉,如果不对,请对不起。
也许是这样的:
pager.post(new Runnable() {
public void run() {
final int currentItem = pager.getCurrentItem();
pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
pager.setCurrentItem(currentItem);
}
});
变为:
Observable.just(pager)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(pager -> {
final int currentItem = pager.getCurrentItem();
pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
pager.setCurrentItem(currentItem);
});
我问的原因是我在轮换和更新ViewPager
时遇到了问题,结果是传递给post(Runnable)
的匿名内部Runnable。可以节省时间,为任务创建一个WeakReference
的静态内部类。
答案 0 :(得分:0)
你什么时候做这个可运行的帖子?
简而言之:
RxJava在这种情况下并没有特别的帮助,可以使用Handler来完成。
更多详情:
两个代码段都会做同样的事情,它们最终会在主线程处理程序上发布一个runnable / action(将按照主线程中排队的其他操作的顺序进行处理)。
如果你是从另一个线程进行的,那么主线程上可能会有'race'活动完成/销毁,这意味着在你需要'live'的行动之前,将会调用使viewpager不再可用的动作viewPager对象,可以使崩溃/ null异常。
确实,如果您将使用finish / destroy操作取消订阅主线程上的observable(无论生命周期事件使viewPager不再“活动”),将不会调用该操作,并且将阻止崩溃。
可以使用Handler.removeCallbacks以类似方式完成,而不是使用Handler.post()使用View.post(内部使用处理程序)。