如果不使用onPostExcute,使用AsyncTask是否有意义?

问题描述

在我正在查看的代码段中,使用了扩展了AsyncTask的私有类。但是,没有使用onPostExecute方法。仅使用doInBackground方法,并且在该方法中发出了POST请求。我的问题是,AsyncTask是否用于在完成工作后更新UI?我的意思是在没有onPostExecute的情况下使用它有意义吗?

(不允许我共享代码的任何部分,如果含糊不清,请谅解。)

谢谢。

解决方法

这取决于要执行的任务。您可以完美地使用AsyncTask而不用调用 onPostExecute ,但是如果它既不使用 onProgressUpdate 方法,则意味着其目的的使用不正确,即在后台线程中执行任务,并在UI线程上通知结果,在UI线程上通知进度更新。

因此,如果根本不使用 onPostExecute onProgressUpdate ,则应该用Thread代替。

还考虑,因此API 30中的AsyncTask类has been deprecated可能是重构此类代码的好时机。

,

是的,如果doInBackground方法中的代码未返回值(仅用于副作用),例如,在您的情况下,它用于POST请求,但不返回值

根据文档:onPostExecute(Result),invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.

示例:

class DownloadFilesTask extends AsyncTask<Integer,Void,Void>{
 @Override
 protected Void doInBackground(Integer... integers) {
    //  DO POST REQUEST
     return null;
 }

}

因为进度结果参数为Void,所以您不必覆盖onPostExecute(Result)方法。