#android #kotlin #android-broadcast #android-workmanager
Вопрос:
Я написал этот код и дал два ограничения:
- Сеть подключена
- Зарядное устройство подключено
но когда я отключаю зарядное устройство, ставлю код в очередь и снова подключаю зарядное устройство, оно не запускается и остается в состоянии очереди, пока сетевое ограничение работает нормально.
Класс Деятельности
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()
}
}
}
Ответ №1:
Ваш код выглядит правильно.
WorkManager setRequiresCharging()
построен на лучших рабочих setRequiresCharging()
местах, и у него может быть иногда удивительное поведение. Из документации JobScheduler:
Для выполнения заданий «зарядка» устройства с питанием от батареи-это не совсем то же самое, что просто подключение к источнику питания. Если устройство настолько занято, что батарея разряжается, несмотря на подключение к источнику питания, задания с этим ограничением выполняться не будут. Это может произойти во время некоторых распространенных случаев использования, таких как видеочат, особенно если устройство подключено к USB, а не к настенному источнику питания.
Я также видел, что иногда в эмуляторе вам нужно настроить устройство на зарядку, а затем увеличить заряд батареи, чтобы увидеть, что ваша работа будет запланирована.