在这种情况下如何用 RxJava 替换 AsyncTask
Posted
技术标签:
【中文标题】在这种情况下如何用 RxJava 替换 AsyncTask【英文标题】:How to replace AsynTask with RxJava in this case 【发布时间】:2021-08-01 00:57:06 【问题描述】:我有一个可以减少图像的类,但我目前正在使用 AsyncTask,现在我想替换它,因为 AsyncTask 现在已弃用。所以有人可以帮助我解决问题
这是我的代码:
class DecreaseImageTask(
val uri: Uri? = null,
val bitmap: Bitmap? = null,
var context: Context,
var listener: (String?) -> Unit
) : AsyncTask<Void, Long, String?>()
override fun doInBackground(vararg params: Void?): String?
return when
uri != null ->
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "")
bitmap != null ->
decreaseImageSize(bitmap = bitmap)
override fun onPostExecute(result: String?)
super.onPostExecute(result)
listener(result)
【问题讨论】:
【参考方案1】:您可以更改 decreaseImageSize
以接受回调作为参数。
在这种情况下,函数将不再需要返回一个字符串,该字符串作为参数传递给回调函数,然后用作
正文中的参数:
fun decreaseImageSize(imagePath: String? = null, bitmap: Bitmap? = null, callback: (String) -> Unit)
...
val result = "" // The result of the previous decreaseImageSize function
callback(result)
然后,不要调用AsyncTask
,而是使用新的decreaseImageSize
函数:
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "") result ->
// Execute the code after the image is decreased
decreaseImageSize(bitmap = bitmap) result ->
// Execute the code after the image is decreased
【讨论】:
以上是关于在这种情况下如何用 RxJava 替换 AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章
如何用 Promise.all 替换多个 async/await 调用?