【问题标题】:Schedule Executor's Schedule Method is Executing Only OnceSchedule Executor 的 schedule 方法只执行一次
【发布时间】:2017-04-07 10:18:46
【问题描述】:

我正在尝试实现一个示例计划,我希望每 10 秒显示一次 toast。但是计划方法只运行一次。有什么解决方案吗? 这是我的代码

公共类 MainActivity 扩展 AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ScheduledExecutorService scheduledExecutorService= Executors.newScheduledThreadPool(1);
    scheduledExecutorService.schedule(new Runnable() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "Hello Schedule", Toast.LENGTH_LONG).show();
                }
            });
        }
    },
    10, TimeUnit.SECONDS);

}

}

【问题讨论】:

    标签: android scheduledexecutorservice


    【解决方案1】:

    阅读有关ScheduledExecutorService#schedule()ScheduledExecutorService#scheduleAt* 之间区别的文档

    【讨论】:

    • 请您提出解决方案。
    【解决方案2】:

    您应该寻找 scheduleAtFixedRate 方法。

    scheduleAtFixedRate: 创建并执行首先启用的定期操作 在给定的初始延迟之后,随后在给定的时间段内; 也就是说,执行将在 initialDelay 之后开始,然后 initialDelay + period,然后是 initialDelay + 2 * period,依此类推。 Documentaion

    示例

    ScheduledExecutorService scheduledExecutorService;
        scheduledExecutorService = Executors.newScheduledThreadPool(1);
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(),"Hello Schedule",Toast.LENGTH_LONG).show();
            }},2,10,TimeUnit.SECONDS);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      相关资源
      最近更新 更多