我从Android应用程序的主线程调用asynctask。但是,我需要暂停主线程,直到异步任务结束。 有人可以建议怎么做吗?
编辑:我需要使用AsyncTask,因为我无法在主线程上执行网络请求
答案 0 :(得分:1)
只需添加进度对话框。
ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("please wait ");
从
显示 onPreExecute(){
progress.show();
}
解雇
onPostExecute(){
progress.dismiss();
}
答案 1 :(得分:1)
一种方法是在AsyncTask执行之前显示一个对话框并关闭postExecute()
public class MyAsyncTask extends AsyncTask<Void, Void, Void> {
ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(UserMessages.this);
dialog.setIndeterminate(true);
dialog.setMessage("Please Wait...");
dialog.setTitle("Loading Messages");
dialog.setCancelable(true);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Do your work
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
dialog.dismiss();
}
}
答案 2 :(得分:1)
你不能暂停主线程但你可以等到AsyncTask完成并使用
生成它的结果AsyncTask.get()
此方法将获取您在DoInBackground()中返回的结果,一旦任务完成,它将实现更多代码
例如,如果你返回字符串然后写这样的方法,
String result=AsyncTask.get();
答案 3 :(得分:-1)
您可以使用排球库而不是异步任务在Android中发出网络请求。它创建一个线程池并减少主线程上的负载。 https://developer.android.com/training/volley/index.html