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分钟)的解决方案吗?