我有一个活动,由 AsyncTask 组成,旨在在用户单击按钮时启动请求。我一直在寻找答案,但我没有发现同样的问题,或者对我来说不一样。代码正在做我想做的事,但是 ProgressDialog 看起来被阻塞了,因为微调器有时(几乎一直)没有转动。
当我点击按钮时:
AsyncTask 已启动 -> showDialog() 被调用 onPreExecute -> startSearch (SearchManager 启动一个新的 AsyncTask,在 doInBackground 中有大量网络调用)-> doInBackground 在 Activity 等待 SearchManager 被加载 -> 显示。
按钮代码:
button_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new SearchTask().execute();
}
});
搜索活动中的 AsyncTask 代码:
private class SearchTask extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute(){
showDialog(DIALOG_LOADING_ID);
searchManager.startSearch();
}
@Override
protected Void doInBackground(Void... params) {
while(searchManager.isLoading()){
try {Thread.sleep(150);} catch(Exception e){};
}
return null;
}
@Override
protected void onPostExecute(Void ret){
try {dismissDialog(DIALOG_LOADING_ID);} catch (Exception e){};
if ( searchManager.errorOccurred() ){
//Error
} else {
//No Error
}
}
SearchManagerAsyncTask 的代码:由 startSearch 直接启动
protected class SearchAsync extends AsyncTask <Void,Void,Void>{
@Override
protected Void doInBackground(ComSearchAds... datas) {
global.getDataManager().doSearch();
//... When finished
setIs_loading(false);
}
}
我显然做错了什么,但找不到什么以及如何避免这种情况。谢谢你的帮助 !
解决方案 :
最后,似乎没有旋转 ProgressDialog 是因为我使用了相同的 ProgressDialog 实例和
showDialog(DIALOG_LOADING_ID);
//doInBackground
dismissDialog(DIALOG_LOADING_ID);
与原因问题一起使用,我改为
removeDialog(DIALOG_LOADING_ID)
现在它工作正常。
谢谢大家,希望有一天它可以帮助某人!