android jetpack 提供的包中提供的新工具:WorkManager
//workManager引入
implementation 'androidx.work:work-runtime:2.5.0' //java
implementation 'androidx.work:work-runtime-ktx:2.5.0' //kotlin
除了官方说的持久性工作用途
我发现使用WorkManager + Retrofit可以帮助我们优雅的完成网络请求事件
例如
我们有一个登录的请求操作,需要将账号+密码上传给服务器进行验证,并将结果反馈到主线程。首先在Android环境下,请求网络这种事情是不能在主线程的,所以一般的做法是单独为其开一个子线程来做请求操作,待请求结果完成,再返回给主线程。这中间所有关于线程切换的操作,都需要我们手动完成,而且中途如果子线程抛出异常,我们是很难处理的,而且还会造成大量的代码冗余。
但是结合WorkManager + Retrofit之后情况就完全不同啦,不废话,上代码:
/**
* 登录任务
*/
class LoginWorker(context: Context, workerParams: WorkerParameters) :
Worker(context, workerParams) {
companion object {
//两个Key值
const val LOGIN_NAME = "LOGIN_NAME"
const val LOGIN_PWD = "LOGIN_PWD"
/**
* 在伴生对象中(相当于java的静态方法)用方法创建一个WorkRequest
* 这个request是一个一次性的Work任务
*/
fun start(name: String, pwd: String): WorkRequest {
val workRequest = OneTimeWorkRequestBuilder<LoginWorker>().apply {
setInputData(Data.Builder().let {