【发布时间】:2021-08-20 02:29:50
【问题描述】:
我一直在搜索很多关于如何在特定时间(例如 5 分钟)内运行特定函数和方法的文章,但我至少找不到与我类似的案例。现在,在我的用例中,我想在 1 分钟内一遍又一遍地运行一个工人。我计划用这个用例来处理网络连接,所以应用程序会在那 1 分钟内尝试连接到服务器,如果连接失败,那么用户可以按下重试按钮。我应该怎么做才能实现我想要的?
这是我的工作:
@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 分钟内重复执行 doWork() 函数
-
如果在 1 分钟内仍未达到连接,则用户无法重试
-
如果应用程序在 1 分钟内仍无法连接,则用户可以按下重试按钮
-
这是我希望实现的输出:
E/MyWork:启动工人
E/MyWork:在 1 分钟内运行 Worker - 1
E/MyWork:在 1 分钟内运行 Worker - 2
E/MyWork:在 1 分钟内运行 Worker - 3
E/MyWork:在 1 分钟内运行 Worker - 4
E/MyWork:在 1 分钟内运行 Worker - ...
E/MyWork:在 1 分钟内运行 Worker - 60
E/MyWork:在 1 分钟内完成运行 Worker
【问题讨论】:
标签: java android loops android-jetpack android-workmanager