我正在尝试定期设置墙纸,为此,我正在使用工作管理器。当我从后台线程(CoroutineWorker)发出网络请求时,我的应用程序UI会冻结,直到网络请求和设置的墙纸完成为止。
我已经尝试过使用异步任务来运行它,但是没有用。
@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()
}
我希望在发出网络请求或在后台设置墙纸时不要冻结该应用程序。