当我在后台线程中发出网络请求时,我的应用程序冻结(使用CoroutineWorker&Work Manager)

时间:2019-05-20 12:00:52

标签: android kotlin retrofit android-workmanager

我正在尝试定期设置墙纸,为此,我正在使用工作管理器。当我从后台线程(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()
    }

我希望在发出网络请求或在后台设置墙纸时不要冻结该应用程序。

0 个答案:

没有答案