问题描述
在我正在查看的代码段中,使用了扩展了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)
方法。