使用Work Manager API每秒执行一次任务

时间:2018-07-06 04:09:12

标签: android kotlin background-process background-service android-workmanager

Work Manager是一个新的API,我尝试每秒执行一次任务,但是它不起作用。

这是我的工人班

df['t'] = v.where(m1.values).sum(axis=1).astype(int)
df['t1'] = v.where(m2.values).sum(axis=1).astype(int)

print (df)
   ID Zone1  CHC1  Value1 Zone2  CHC2  Value2 Zone3  CHC3  Value3   t  t1
0   1   R5B   100      10    C2     0      20  R10A     2       5  35   0
1   1    C2    95      20  M2-6     5       6   R5B     7       3  23   6
2   3    C2    40       4    C4    60       6     0     6       0  10   0
3   3    C1   100       8     0     0       0     0   100       0   8   0
4   5  M1-5    10       6  M2-6    86      15     0     0       0   0  21

这就是我叫它的地方。

class TestingWorker : Worker(){
    override fun doWork(): Result {
        Log.i("CheckWorker","Result here")
        return Result.SUCCESS
    }
}

2 个答案:

答案 0 :(得分:21)

它不起作用是因为两次定期工作请求之间的最小间隔为15分钟,由MIN_PERIODIC_INTERVAL_MILLIS定义。

基于documentation

  

创建一个PeriodicWorkRequest以每个间隔定期运行一次   期。保证PeriodicWorkRequest只能运行一次   在此间隔内。 间隔Millis必须大于或   等于PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS 。它可能   立即运行,在周期结束时或在此间隔之间的任何时间运行   只要当时满足其他条件即可。

我建议您避免如此频繁地安排工作。最终会消耗更多资源,并最终影响电池寿命。

答案 1 :(得分:1)

WorkManager并非旨在每秒运行一次任务,因为它具有两个选项来构建工作请求,即

  • PeriodicWorkRequest-每15分钟运行一次重复的任务,即使我们将时间间隔更改为<15分钟,默认情况下也仅运行15分钟。
  • OneTimeWorkRequest-运行一次

WorkManager将使workrequest入队,并分别调用Worker类来运行任务,其中每个worker类将覆盖定义实际任务的doWork()

此方法在后台线程中运行,并运行10分钟,之后该工作程序停止。

因此,如果您要安排运行前台服务更好的每秒运行的任务,或者您的运行任务持续时间较短。

如果您想长时间运行后台任务,最好的方法是避免这样做。