Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果不使用OnPostExecute,使用AsyncTask有意义吗?_Java_Android_Android Asynctask_Request_Ui Thread - Fatal编程技术网

Java 如果不使用OnPostExecute,使用AsyncTask有意义吗?

Java 如果不使用OnPostExecute,使用AsyncTask有意义吗?,java,android,android-asynctask,request,ui-thread,Java,Android,Android Asynctask,Request,Ui Thread,在我看到的一个代码片段中,使用了一个扩展了AsyncTask的私有类。但是,不使用onPostExecute方法。仅使用doInBackground方法,在该方法中有POST请求。我的问题是,AsyncTask不是用来在完成一项工作后更新UI的吗?我的意思是,在没有onPostExecute的情况下使用它有意义吗 (我不允许分享代码的任何部分,如果这是含糊不清的,我很抱歉。) 谢谢。是的,如果doInBackground方法中的代码未返回值(仅用于副作用),例如,在您的案例中,它用于POST请求

在我看到的一个代码片段中,使用了一个扩展了
AsyncTask
的私有类。但是,不使用
onPostExecute
方法。仅使用
doInBackground
方法,在该方法中有
POST
请求。我的问题是,
AsyncTask
不是用来在完成一项工作后更新UI的吗?我的意思是,在没有
onPostExecute
的情况下使用它有意义吗

(我不允许分享代码的任何部分,如果这是含糊不清的,我很抱歉。)


谢谢。

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

根据文档:
onPostExecute(Result),后台计算完成后在UI线程上调用。后台计算的结果作为参数传递到此步骤。

例如:

class DownloadFilesTask extends AsyncTask<Integer, Void, Void>{
 @Override
 protected Void doInBackground(Integer... integers) {
    //  DO POST REQUEST
     return null;
 }
类下载文件任务扩展异步任务{
@凌驾
受保护的Void doInBackground(整数…整数){
//发帖
返回null;
}
}


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

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

因此,如果根本没有使用onPostExecuteonProgressUpdate,则可能应该使用替换


还应考虑到API 30中的AsyncTask类可能是重构此类代码的好时机。

这取决于AsyncTask的用途。如果你觉得没有它没问题(或者你只是因为某种原因不需要它),那么你可以让它空着。但是我建议您使用onPostExecute来完成完成完成后的后台过程,例如显示结果等。如果我不使用它,那么目的是什么?这就是为什么它完全取决于您试图实现的目标。例如,如果您使用AsyncTask解析JSON,您可以在doInBackground中进行解析,并在onPostExecute中显示结果。我期待着一个新概念的建议,如果它不会提醒用户界面的话。是的,但问题是,为什么要使用异步任务呢?如果你不想提醒用户界面,那么你是对的,使用它是没有意义的,我只是详细说明一下,以防你一开始不知道如何使用它。而且它现在已经被弃用了,您可以使用Coroutines,它还具有withContext(Dispactcher.main)方法,可以实现onPostExecute(Result)的工作,但更优雅,也有更多的好处。