scheduleAtFixedRate不会重复运行

时间:2018-08-24 20:00:02

标签: java android scheduled-tasks

这是我第一次尝试在活动中创建动作,该动作应定期重复。 我的片段看起来像这样

 private void setBackground(final ConstraintLayout mainActivityLayout) {
    //Setting int[] for background images
    final int[] ints = new int[]{
            R.drawable.main_screen_background_1,
            R.drawable.main_screen_background_2,
            R.drawable.main_screen_background_3,
            R.drawable.main_screen_background_4};
    //Preparing runnable for periodic background change
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < ints.length; i++) {
                mainActivityLayout.setBackgroundResource(ints[i]);
            }
        }
    };
    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
    // This schedule a runnable task which change the background image every 10 seconds
    scheduledExecutorService.scheduleAtFixedRate(runnable, 0, 10000, TimeUnit.MILLISECONDS);
}

整个想法是定期更改背景图像。我正在为这些图像准备int [],以便在Runnable中循环遍历它们。 然后,我使用ScheduledExecutorService,让图像每10秒更改一次。

但是它似乎不起作用。我在活动的onCreate部分中调用此方法。似乎runnable没有被调度,并且只完成了1次(不会重复)。

我的猜测是:

  1. 我在错误的地方调用了此方法(也许我应该在其他地方而不是onCreate处调用它)
  2. 我实际上使用了错误的方法来处理计划。在这里,我感到非常困惑,因为我在那里找到了其他一些选项(具有延迟发布的处理程序,runOnUiThread),但是我发现最推荐使用计划执行程序服务。
  3. Runnable部件语法可能有问题。当我尝试调试此程序时,调试器将直接转到Scheduled Executor Service,然后执行其余的onCreate方法(我在那里获得Google Firebase的实例,但我认为这与我在onCreate中所做的事情无关),然后将其转到可运行部分,但只有一次。

我知道这可能是微不足道的,但是我在这里真的很困惑。

0 个答案:

没有答案