Android 如果异步任务需要时间,则显示ProgressDialog
我有一个类似这样的任务:Android 如果异步任务需要时间,则显示ProgressDialog,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我有一个类似这样的任务: private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> { ProgressDialog progressDialog; @Override protected void onPreExecute() { progressDialog = ProgressDialog.show(getSherlockActivit
private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(getSherlockActivity(), "In progress", "Loading");
}
@Override
protected Boolean doInBackground(Void... params) {
try {
currentScreen.retrieveData();
return true;
} catch (IOException ex) {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
if (result) {
currentScreen.retrieveDataFinished();
} else {
showExceptionOccurred();
}
}
final Handler handler = new Handler();
private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {
ProgressDialog progressDialog = null;
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(Void... params) {
handler.postDelayed(pdRunnable, 500);
try {
currentScreen.retrieveData();
return true;
} catch (IOException ex) {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
handler.removeCallbacks(pdRunnable);
if(progressDialog != null)
progressDialog.dismiss();
if (result) {
currentScreen.retrieveDataFinished();
} else {
showExceptionOccurred();
}
}
final Runnable pdRunnable = new Runnable() {
@Override
public void run() {
progressDialog = ProgressDialog.show(getSherlockActivity(),
"In progress", "Loading");
}
};
}
私有类RetrieveDataAsyncTask扩展了AsyncTask{
进行对话进行对话;
@凌驾
受保护的void onPreExecute(){
progressDialog=progressDialog.show(getSherlockActivity(),“正在进行”,“正在加载”);
}
@凌驾
受保护的布尔doInBackground(Void…params){
试一试{
currentScreen.retrieveData();
返回true;
}捕获(IOEX异常){
返回false;
}
}
@凌驾
受保护的void onPostExecute(布尔结果){
progressDialog.disclose();
如果(结果){
currentScreen.retrieveDataFinished();
}否则{
showExceptionOccurred();
}
}
现在,当AsyncTask花费的时间少于500毫秒时,我不想显示ProgressDialog,它只会导致闪烁,并且可能会令人恼火。
我想要的是等待500毫秒,检查AsyncTask是否仍然忙,如果忙,则显示ProgressDialog
我如何才能做到这一点?试着这样做:
private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(getSherlockActivity(), "In progress", "Loading");
}
@Override
protected Boolean doInBackground(Void... params) {
try {
currentScreen.retrieveData();
return true;
} catch (IOException ex) {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
progressDialog.dismiss();
if (result) {
currentScreen.retrieveDataFinished();
} else {
showExceptionOccurred();
}
}
final Handler handler = new Handler();
private class RetrieveDataAsyncTask extends AsyncTask<Void, Void, Boolean> {
ProgressDialog progressDialog = null;
@Override
protected void onPreExecute() {
}
@Override
protected Boolean doInBackground(Void... params) {
handler.postDelayed(pdRunnable, 500);
try {
currentScreen.retrieveData();
return true;
} catch (IOException ex) {
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
handler.removeCallbacks(pdRunnable);
if(progressDialog != null)
progressDialog.dismiss();
if (result) {
currentScreen.retrieveDataFinished();
} else {
showExceptionOccurred();
}
}
final Runnable pdRunnable = new Runnable() {
@Override
public void run() {
progressDialog = ProgressDialog.show(getSherlockActivity(),
"In progress", "Loading");
}
};
}
final Handler=new Handler();
私有类RetrieveDataAsyncTask扩展了AsyncTask{
ProgressDialog=null;
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的布尔doInBackground(Void…params){
handler.postDelayed(pdRunnable,500);
试一试{
currentScreen.retrieveData();
返回true;
}捕获(IOEX异常){
返回false;
}
}
@凌驾
受保护的void onPostExecute(布尔结果){
handler.removeCallbacks(pdRunnable);
如果(progressDialog!=null)
progressDialog.disclose();
如果(结果){
currentScreen.retrieveDataFinished();
}否则{
showExceptionOccurred();
}
}
final Runnable pdRunnable=new Runnable(){
@凌驾
公开募捐{
progressDialog=progressDialog.show(getSherlockActivity(),
“进行中”、“装载中”);
}
};
}
斯坦的建议似乎是正确的:
请在onPreExecute()
中尝试以下行:
如果采用strightforward方法,将onPreExecute中的TimerTask调度为500 ms,并在onPostExecute中取消它,那么该方法如何?对话框的创建应在计时器任务中移动。在doInBackGround()中编写检查时间500 ms的代码,如果该时间仍然繁忙,则使用publishProgress方法和onProgressUpdate()进行start ProgressDialog..@user370305,否,处理完成后,计时器任务立即取消。