WorkManager详解,Android开发中遇到最难的问题

override fun getExtras(): Extras {
   return Extras(...) //也可以把参数写死在这里

}

override fun onStopped(cancelled: Boolean) {
super.onStopped(cancelled)
//当任务结束时会回调这里

}

override fun doWork(): Result {

    Log.d(tag,"任务执行完毕!")
    return Worker.Result.SUCCESS
}

}


##### 向任务添加参数

1.  在Request中传参:
    
    ```
    val data=Data.Builder()
            .putInt("A",1)
            .putString("B","2")
            .build()
    val request2 = PeriodicWorkRequestBuilder<MyWorker>(24,TimeUnit.SECONDS)
            .setInputData(data)
            .build() 
    ```
2.  在Worker中使用:
    
    ```
    class MyWorker:Worker() {
    
        val tag = javaClass.simpleName
    
        override fun doWork(): Result {
    
            val A = inputData.getInt("A",0)
            val B = inputData.getString("B")
            return Worker.Result.SUCCESS
        }
    } 
    ```

当然除了上述代码中的方法之外,我们也可以重写父级的`getExtras()`,并在此方法中把参数写死再返回也是可以的。

这里WorkManager就有一个不是很人性的地方了,那就是**WorkManager不支持序列化传值**!这一点让我怎么说啊,intent和Bundle都支持序列化传值,为什么偏偏这货就不行?那么如果传一个复杂对象还要先拆解吗?

##### 任务的返回值

很类似很类似的,任务的返回值也很简单:

override fun doWork(): Result {

val A = inputData.getInt("A",0)
val B = inputData.getString("B")

val data = Data.Builder()
        .putBoolean("C",true)
        .putFloat("D",0f)
        .build()
outputData = data//返回值
return Worker.Result.SUCCESS

}


doWork要求最后返回一个Result,这个Result是一个枚举,它有几个固定的值:

*   FA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值