ユーザーがボタンをクリックしたときにリクエストを起動することを目的としたAsyncTaskで構成されるアクティビティがあります。私は答えを探していましたが、同じ問題が見つからなかったか、同じではありませんでした。コードは私が望むことを実行していますが、スピナーが時々(ほとんど常に)回転していないため、ProgressDialogはブロックされているように見えます。
ボタンをクリックすると:
AsyncTaskが起動されます->showDialog()がonPreExecute-> startSearchで呼び出されます(SearchManagerはdoInBackgroundで新しいAsyncTaskを起動し、ネットワークで大量の呼び出しがあります)->ActivityのdoInBackgroundは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)
そして今、それはうまく機能しています。
すべてに感謝し、それがいつか誰かを助けることができることを願っています!