在我的应用程序中,我使用ProgressDialog向用户显示某些服务正在运行。我在我的活动中启动了ProgressDialog,但它没有正确显示。它没有马上开始。就在服务大部分完成时,它弹出一毫秒并再次解散。
它是如何运作的:
在我的活动中,我有一个按钮。单击该按钮时,我启动ProgressDialog并调用AsyncTask进行服务调用。完成AsyncTask后,它会将结果广播(!)回活动。 AsyncTask无法直接访问活动。整个过程工作顺利。但不是ProgressDialog。
ProgressDialog变量是类成员。
答案 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上工作。