当前位置: 首页 > 知识库问答 >
问题:

当另一个重复任务完成时,android运行一个重复任务

子车鸿运
2023-03-14

我有一个任务执行10秒,周期为1秒,没有延迟,另一个任务执行30秒,周期为5秒,当第一个任务完成时。

此外,我需要取消两个任务时,一个按钮被按下。

>

  • 我尝试了基本线程,但将阻塞GUI,直到两个任务都执行
  • 我尝试executorService executorService=executors.newsingletheadexecutor(),但我这里是executor.submit(runnable)一个接一个地执行任务,但不是每个任务都定期执行

    我尝试了预定的executor,但预定的executor是异步的,我知道如何使用

    executorService.scheduleAtFixedRate(runnable1, delay, period);      
    //and after finished to run
    executorService.scheduleAtFixedRate(runnable2, delay, period);
    

    任何反馈都很感激。

  • 共有1个答案

    鲁羽
    2023-03-14

    可以使用CountDownTimer类。我模仿了一个简单的演示。

    我创建了几个runnable任务来模拟VolumeUp和VolumeDown函数。

    timerup启动时,它会在给定的时间内计数。完成timerupcounts之后,在onfinish中启动timerdown。它倒计时。

    public class TimerActivity extends AppCompatActivity {
    
        private TextView out;
        int value = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_timer);
    
            out = (TextView) findViewById(R.id.out);
            setText(value);
    
            timerUp.start();
        }
    
        CountDownTimer timerUp = new CountDownTimer(10000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                runnable1.run();
            }
    
            @Override
            public void onFinish() {
                timerDown.start();
            }
        };
    
        CountDownTimer timerDown = new CountDownTimer(10000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                runnable2.run();
            }
    
            @Override
            public void onFinish() {
                Log.e("done", "onFinish");
            }
        };
    
        private void setText(final int value){
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    out.setText(String.valueOf(value));
                }
            });
        }
    
        Runnable runnable1 = new Runnable() {
            @Override
            public void run() {
                value += 10;
                setText(value);
            }
        };
    
        Runnable runnable2 = new Runnable() {
            @Override
            public void run() {
                value -= 10;
                setText(value);
            }
        };
    }
    
    timerUp.cancel();
    timerDown.cancel();
    

    您可能不得不稍微玩弄一下时间值。希望你能明白。祝你好运.:)

     类似资料:
    • 我在gradle项目中添加了一个任务: 现在,任务总是在任务之前运行。这很好,因为构建任务包含许多步骤。现在我想显式禁用其中一个包含的任务。

    • 问题内容: 我有以下使用类的课程。所以我想做的是,在运行cp1实例处理方法的同时,我要并行运行。 但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗?还是线程? 我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并

    • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

    • 我已经创建了3个任务。Task3取决于Task1和Task2的结果。在调试代码时,它会正确执行,但在运行应用程序时,Task3会在Task1和Task2完成之前执行。 示例代码: 提前谢谢。

    • 问题内容: 我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。 很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为:芹菜调度程序通过将其再次发送给工作人员来重新运行刚刚完成的任务(我正在运行一个工作人员),并且它在同一时间发生了2次任务! 有人可以帮助我知道为什么会发生这种情况以及如何预防吗? 这些任务肯定

    • 使用asyn/wait vs wait有什么区别task.run() 等待任务。运行示例- 异步等待示例-