2011-01-31 10 views
1

onPreExecuteメソッドで表示されるAlertDialogが終了するまで、AsyncTaskのdoInBackgroundメソッド/スレッドが開始されないようにする方法はありますか?AsyncTaskのAlertDialog onPreExecuteを終了するまでdoInBackgroundを停止させます。

doInBackgroundはonPreExecuteが完了したときにのみ実行されますが、私が知る限り、開いているAlertDialogを持っていればonPreExecuteが完了するのを止めることはありません。

詳細: コードサンプルは提供できませんが、コードの概要は、通信会社のネットワーク上にあるためにモバイルデータ経由でしかアクセスできないデータを必要とするアプリケーションです。私のgetData asynctaskのpreExecは、wifiが起動しているかどうかを最初にチェックし、もしそうなら、WifiとCancelのオプションを無効にして警告ダイアログを表示します。

キャンセルするとタスクが終了し、Wi-Fiを無効にするとWi-Fiを無効にする必要があります。 doInBgメソッドはモバイルデータ接続がアップしているかどうかをチェックし、そうでない場合はスリープループに入ります。一度起動すると、doInBgはデータを取得します。

現在、Wi-Fiがオンの場合、ダイアログが閉じられる前に起動します。何かがモバイル接続を開始するまでスリープループにトラップされます。私が避けたい潜在的な問題へ。

答えて

0

あなたのWiFiが起動しているかどうかを確認するためにどこかに起動してから、AlertDialogListenerを使用してAlertDIalogのボタンの動作をキャッチすることができます。 AlertDialogListener内でAsyncを開始することができます。

+0

これは、データが必要なすべての場所でダイアログコードを繰り返していることを除いて、今のようなものです...可能ですが、構造的にもエレガントでもありません。また、onPreExecuteの最後にwhile(!dialogGone)スタイルのループを追加し、onDismissリスナーを使用してdialogGoneをtrueに設定することも考慮していますが、これはエレガントではありません...最後に、ダイアログを完全に取り除く可能性がありますユーザーに知らせるトーストでWi-Fiを無効にするだけです。 – Greg

+0

ちょうど更新するために、私は実際にダイアログを完全に取り除くことになった。 :) – Greg

関連する問題