Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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
Android:如何暂停主线程直到AsyncTask完成?_Android_Android Asynctask - Fatal编程技术网

Android:如何暂停主线程直到AsyncTask完成?

Android:如何暂停主线程直到AsyncTask完成?,android,android-asynctask,Android,Android Asynctask,我正在从Android应用程序的主线程调用asynctask。但是,我需要暂停主线程,直到异步任务结束。 有人能建议怎么做吗 编辑:我需要使用异步任务,因为我无法在主线程上执行网络请求只需添加进度对话框 ProgressDialog progress = new ProgressDialog(this); progress.setMessage("please wait "); 从 onPreExecute(){ progress.show(); } 解雇 onP

我正在从Android应用程序的主线程调用asynctask。但是,我需要暂停主线程,直到异步任务结束。 有人能建议怎么做吗


编辑:我需要使用异步任务,因为我无法在主线程上执行网络请求

只需添加进度对话框

ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("please wait ");

    onPreExecute(){
      progress.show();
    }
解雇

onPostExecute(){
   progress.dismiss(); 
 }

一种方法是在AsyncTask执行之前显示一个对话框,并在
postExecute()

公共类MyAsyncTask扩展了AsyncTask{
进程对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
dialog=新建ProgressDialog(UserMessages.this);
对话框。setUndeterminate(true);
setMessage(“请稍候…”);
setTitle(“加载消息”);
对话框。可设置可取消(true);
dialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
//做你的工作
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
dialog.dismise();
}
}

不能暂停主线程,但可以等到AsyncTask完成,然后使用

AsyncTask.get()
此方法将获取您在DoInBackground()中返回的结果,一旦任务完成,它将实现进一步的代码

例如,如果您返回字符串,然后像这样编写您的方法

String result=AsyncTask.get();

您可以在Android中使用volley库而不是异步任务发出网络请求。它创建一个线程池并减少主线程上的负载

如果您想这样做,那么为什么要使用
AsyncTask
AsyncTask
的要点是在执行某些工作时不要暂停主线程。我也去了你想那样做吗?暂停主线程是您应该避免的事情。这是一个网络请求。您的回答有点奇怪,您希望从主线程启动一个异步任务,然后停止主线程。那么,为什么要启动另一个线程?为什么在执行网络请求时要阻止主线程?暂停主线程是一件坏事,因为它可能会让用户对正在发生的事情感到困惑。相反,添加一个进度对话框,让用户知道正在发生什么事情。这不会停止主线程,这将锁定屏幕上的用户交互。也许问题不好,这才是真正的答案。实际上,停止主线程是什么,只是不允许用户做任何事情。鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么,以及它为什么存在。始终引用重要链接中最相关的部分,以防无法访问目标站点或永久脱机。从…起
String result=AsyncTask.get();