Android:如何暂停主线程直到AsyncTask完成?
我正在从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
编辑:我需要使用异步任务,因为我无法在主线程上执行网络请求只需添加进度对话框
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();