【问题标题】:Charging constraint not working properly in WorkManager In Android Kotlin充电约束在 Android Kotlin 中的 WorkManager 中无法正常工作
【发布时间】:2021-11-24 09:59:30
【问题描述】:

我写了这段代码并给出了两个约束:

  1. 网络已连接
  2. 充电器已连接

但是当我断开充电器并将代码入队并再次插入充电器时,它不会运行并保持入队状态,而网络约束工作得很好。

活动类

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
    binding.button.setOnClickListener {
        setWorkManager()
    }
}

private fun setWorkManager() {
    val workManager =  WorkManager.getInstance(applicationContext)
    val constrains = Constraints.Builder()
        .setRequiresCharging(true)
        .build()

    val uploadRequest = OneTimeWorkRequestBuilder<MyWorker>()
        .setConstraints(constrains)
        .build()

    workManager.enqueue(uploadRequest)
}

}

工人阶级

class MyWorker(
    context: Context,
    param: WorkerParameters) :  Worker(context, param) {

    override fun doWork(): Result {
        return try {
            for (i in 0..600) {
                Log.i("check", "in $i")
            }
            Result.success()
        } catch (e: Exception) {
            Result.failure()
        }
    }
}

【问题讨论】:

    标签: android kotlin android-broadcast android-workmanager


    【解决方案1】:

    您的代码看起来正确。

    WorkManager 的setRequiresCharging() 建在上面 JobScheduler 的setRequiresCharging(),它有时可能会出现令人惊讶的行为。来自 JobScheduler 文档:

    出于运行作业的目的,电池供电的设备“充电”与简单地连接到电源并不完全相同。如果设备太忙以至于尽管连接了电源但电池正在耗尽,则具有此约束的作业将不会运行。这可能发生在视频聊天等一些常见用例中,尤其是在设备插入 USB 而不是墙上电源的情况下。

    我还看到,有时,在模拟器上,您需要将设备设置为正在充电,然后增加电池电量才能看到您的工作被安排。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2021-10-16
      • 1970-01-01
      相关资源
      最近更新 更多