Android:如何在AsyncTask完成之前暂停主线程?

时间:2016-06-16 11:59:25

标签: android android-asynctask

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

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

4 个答案:

答案 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