Android -循环工作1分钟



我一直在寻找许多关于如何在特定时间内(例如5分钟)运行特定函数和方法的文章,但我找不到至少与我的案例类似的文章。现在,在我的用例中,我想在1分钟内反复运行一个worker。我计划用这个用例来处理网络连接,所以应用程序将尝试在1分钟内连接到服务器,如果失败了,那么用户可以按下重试按钮。我该怎么做才能得到我想要的?

这是我的doWork:

@NonNull
@Override
public Result doWork() {
Log.e("MyWork", "Starting Worker");
for (long stop = System.nanoTime()+ TimeUnit.SECONDS.toNanos(1); stop>System.nanoTime();) {
Log.e("MyWork", "Running Worker in 1 Minute");
}
//        Been using below's code but still didn't work
//        long startTime = System.nanoTime();
//        while ((System.nanoTime()-startTime)< 5*60){
//            Log.e("MyWork", "Running Worker in 1 Minute");
//        }
Log.e("MyWork", "Done Running Worker in 1 Minute");
return Result.retry();
}

我想实现的是:

  1. 我想在1分钟内重复执行doWork()函数

  2. 如果用户在1分钟内没有建立连接,则不能重试

  3. 如果应用程序在1分钟内仍然无法连接,则用户可以按重试按钮

  4. 这是我希望我能达到的输出:

    E/MyWork: Starting Worker

    E/MyWork:运行Worker在1分钟与秒- 1

    E/MyWork:运行Worker在1分钟与秒- 2

    E/MyWork:运行Worker在1分钟与秒- 3

    E/MyWork:运行Worker在1分钟与秒- 4

    E/MyWork:在1分钟内运行Worker

    E/MyWork:运行Worker在1分钟与秒- 60

    E/MyWork: Done Running Worker in 1分钟

尝试像这样使用CountDownTimer:

new CountDownTimer(60000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
doWork()
}
@Override
public void onFinish() {
Log.d("MyWork", "Done running worker in 1 minute");
}
}.start();

最新更新