根据我从文档https://developer.android.com/topic/libraries/architecture/workmanager中所读到的内容,
它说:
即使您的应用被强制退出或 设备重新启动。
这意味着,无论如何,在后台执行的操作都会100%执行到完成为止。
例如:
具有执行Work Manager实施的应用程序的按钮,该按钮可将数据上传到在线数据库,但需要Internet连接才能上传数据。因此,我的应用程序当前处于离线模式,然后单击按钮。
不确定性
工作管理器是否会在后台运行该过程,并且即使没有Internet连接也会继续重试该过程?并且仅完成并停止该过程,直到建立Internet连接并完成数据上传?
答案 0 :(得分:5)
工作经理将在后台运行该流程,并继续重试 即使没有Internet连接也会如何处理?而且只有 完成并停止该过程,直到建立Internet连接为止 并完成数据上传?
它不会隐式地尝试连续执行工作并仅在成功后才停止。这取决于doWork()
或您的Worker
返回的结果。如果返回RETRY
,则将使用WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, long, TimeUnit)
中指定的退避重试工作。
但是,如果在连接互联网时需要执行某些操作,则可以指定适当的约束。对于网络连接,可以按如下所示设置约束:
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance().enqueue(mywork);
WorkManager
将确保只有在连接互联网的情况下才能执行您的工作。
答案 1 :(得分:2)
工作经理将在后台运行该流程,并继续重试 即使没有Internet连接也会如何处理?而且只有 完成并停止该过程,直到建立Internet连接为止 并完成数据上传?
因此,因为您已指定工作经理需要网络连接。
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED).build()
val workRequest = OneTimeWorkRequest.Builder(RequestWorker::class.java)
.setConstraints(constraints)
.build()
在建立网络连接之前,不会触发工作请求,将其视为 WorkManager 来监听NetworkState的更改,一旦网络连接,它将开始处理您的workRequest(doWork)。
我还必须补充一点,当您的手机处于AirPlane模式并且您的手机重新启动并有一个待处理的工作请求时,我目前不认为可以保证您可以立即开始处理工作请求可以预期,即使NetWork状态为CONNECTED。