youth5201314 / banner

🔥🔥🔥Banner 2.0 来了!Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义。
Apache License 2.0
12.87k stars 2.51k forks source link

AutoLoopTask 优化下? #1235

Open lianyagang opened 2 months ago

lianyagang commented 2 months ago

static class AutoLoopTask implements Runnable { private final WeakReference reference;

    AutoLoopTask(Banner banner) {
        this.reference = new WeakReference<>(banner);
    }

    @Override
    public void run() {
        Banner banner = reference.get();
        if (banner != null && banner.mIsAutoLoop) {
            int count = banner.getItemCount();
            if (count == 0) {
                return;
            }
            int next = (banner.getCurrentItem() + 1) % count;
            banner.setCurrentItem(next);
            banner.postDelayed(banner.mLoopTask, banner.mLoopTime);
        }
    }
}

建议添加一下,如果有且只有一条数据,就不要再发送postDelayed了

gebaobao commented 1 month ago

这里最大的问题是,需要在执行postDelayed()前 banner.removeCallbacks(banner.mLoopTask); 不然低性能的设备上会出现单次连续执行任务