Android ProgressDialog无法正确显示

时间:2016-08-09 13:24:10

标签: android progressdialog

在我的应用程序中,我使用ProgressDialog向用户显示某些服务正在运行。我在我的活动中启动了ProgressDialog,但它没有正确显示。它没有马上开始。就在服务大部分完成时,它弹出一毫秒并再次解散。

它是如何运作的:

在我的活动中,我有一个按钮。单击该按钮时,我启动ProgressDialog并调用AsyncTask进行服务调用。完成AsyncTask后,它会将结果广播(!)回活动。 AsyncTask无法直接访问活动。整个过程工作顺利。但不是ProgressDialog。

ProgressDialog变量是类成员。

2 个答案:

答案 0 :(得分:0)

这是foo: pushq %rbp movq %rsp, %rbp subq $2000016, %rsp movl 1999996(%rsp), %eax movl %eax, x(%rip) leave ret foo2: pushq %rbp movl $1000016, %edx #only the first array is allocated movq %rsp, %rbp subq %rdx, %rsp leaq 3(%rsp), %rax subq %rdx, %rsp shrq $2, %rax movl 999996(,%rax,4), %eax addl 999996(%rsp), %eax movl %eax, x(%rip) leave ret 的4个步骤,您应使用第一个AsyncTask和最后一个onPreExecute(),以显示和解除您的onPostExecute(Result)

  

执行异步任务时,任务将经历4个步骤:

     

1.- onPreExecute(),在执行任务之前在UI线程上调用。例如,此步骤通常用于设置任务   通过在用户界面中显示进度条。

     

2.- doInBackground(Params ...),在onPreExecute()完成执行后立即在后台线程上调用。使用此步骤   执行可能需要很长时间的后台计算。该   异步任务的参数传递给此步骤。该   计算结果必须由此步骤返回并且将是   回到最后一步。这一步也可以使用   publishProgress(Progress ...)发布一个或多个进度单元。   这些值发布在UI线程中   onProgressUpdate(Progress ...)步骤。

     

3.- onProgressUpdate(Progress ...),在调用publishProgress(Progress ...)后在UI线程上调用。执行的时间是   未定义。此方法用于显示任何形式的进度   后台计算仍在执行时的用户界面。   例如,它可用于为进度条设置动画或显示登录   文本字段。

     

4.- onPostExecute(Result),在后台计算完成后在UI线程上调用。背景的结果   计算作为参数传递给此步骤。

来自https://developer.android.com/reference/android/os/AsyncTask.html

的信息

答案 1 :(得分:0)

您必须在活动中创建asyncTask对象并调用execute()方法。 CustomAsyncTask是内部类。

ProgressDialog mProgressDialog; mProgressDialog = new ProgressDialog(PlayerView.this); CustomAsyncTask asyncTask = new CustomAsyncTask(); asyncTask.execute();

private class CustomAsyncTask extends AsyncTask<Void, Void, Void> {


    @Override
    protected void onPreExecute() {
        super.onPreExecute();

            mProgressDialog.setMessage("Loading");
            mProgressDialog.setTitle("please wait");
            mProgressDialog.show();

    }

    @Override
    protected ArrayList<PlayerViewModel> doInBackground(Void... params) {
        return //do yout doInBackground work here
    }

    @Override
    protected void onPostExecute(Void void) {
      //when your process completed hide the ProgressDialog
        mProgressDialog.hide();
    }
}

你必须要做的是,在onPreExecute()方法中启动进度对话框并在onPostExecute方法中隐藏progressDialog,因为这两个方法都在主Thred上工作。