如何在Oreo(API级别28)及以后甚至在打ze模式下运行的连续周期性后台工作(间隔为15分钟)?

时间:2018-09-24 14:23:06

标签: android background-process android-8.0-oreo android-workmanager android-doze

Android从Android 6.0(API级别23)开始,引入了打ze模式,并引入了对Android中后台处理的各种限制。 Android还引入了WorkManager API,可轻松指定异步任务及其运行时间。从Android documentation of WorkManager中,我们得到:

  

注意:WorkManager适用于需要保证的任务   即使应用程序退出,系统也会运行它们。

我使用以下程序进行了相同的测试:

在MainActivity(App的Launcher活动)中,我创建周期为15分钟(周期请求的最小允许间隔)的PeriodicWorkRequest并将其处理给workManager

# base
prop <- function(x) table(x)[x] / length(x)
transform(widgets, frac = ave(style, color, FUN = prop))

# dplyr - uses prop function from above
library(dplyr)
widgets %>% group_by(color) %>% mutate(frac = prop(style)) %>% ungroup

和BackgroundWorker如下,并在运行时记录日志:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    runWorkRequest()

}

// create a PeriodicWorkRequest with Periodic Interval of 15 mins
fun runWorkRequest() {
    val periodicWorkRequestBuilder = PeriodicWorkRequest.Builder(BatteryWorker::class.java, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
            , TimeUnit.MILLISECONDS)
    val periodicWorkRequest = periodicWorkRequestBuilder.build()
    WorkManager.getInstance().enqueue(periodicWorkRequest)
}
}

现在,如果我在Api Level 28上运行上述代码,并将应用程序从“最近使用的应用程序列表”上滑动下来,然后关闭设备屏幕,则仅定期记录日志40-45分钟,然后停止后台工作人员。这与文档要求的保证执行相反。

有人能在Android Oreo及更高版本的后台中确保无限期定期执行(周期间隔为15分钟)的解决方案吗?

0 个答案:

没有答案