Я пытаюсь установить обои на периодической основе, и для этого я использую Диспетчер работ.Когда я выполняю сетевой запрос из фонового потока (CoroutineWorker), пользовательский интерфейс моего приложения останавливается до завершения сетевого запроса и установки обоев.
Я уже пытался выполнить это с помощью Async Task, но безрезультатно.
@WorkerThread
override suspend fun doWork(): Result = coroutineScope {
try {
MainService.createRetrofitService().getRandomPhoto(map)
.enqueue(object : Callback<RandomPhotoModel> {
override fun onFailure(call: Call<RandomPhotoModel>, t: Throwable) {
Log.e(Constants.Tag, t.localizedMessage)
}
override fun onResponse(call: Call<RandomPhotoModel>, response: Response<RandomPhotoModel>) {
if (response.isSuccessful) {
Glide.with(appContext).asBitmap().load(checkAndReturnImage(response.body()!!))
.into(object : SimpleTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
val wallpaperManager = WallpaperManager.getInstance(applicationContext)
wallpaperManager.setBitmap(resource)
}
})
}
}
})}catch (throwable: Throwable) {
Log.e(Constants.Tag, "Error applying wallpaper", throwable)
Result.failure()
} catch (e: Exception) {
Log.e(Constants.Tag, "Error applying wallpaper")
Result.failure()
}
Я ожидаю, что приложение не должно зависать при выполнении сетевого запроса или установке обоев в фоновом режиме.