2012-01-23 8 views
1

私のアプリケーションでは問題があります。Asynctaskクラスを使用してバックグラウンド処理を実行しています。ソケットでAsynctaskを使用するには

私のアプリケーションでは、udpリスナーとudp送信者がそれぞれサーバーからのリッスンを行い、それぞれの種類のデータを受信して​​います。これらの両方の非同期クラスを作成しました。今は両方のAsynctaskボタンをクリックしたときの主なアクティビティから実行されるクラス、実行できる停止ボタン、実行を停止するボタンがありますが、一旦停止ボタンをクリックすると、スレッドはまだ実行し続けています私のAsynctaskクラスのオブジェクトを作成していて、呼び出しを実行してリスナーと送信者が実行し続けるようにしています。 doinBackground()は常に自分自身を呼び出し続け、リスナと送信者は動作を続けます。

私は、postexecute()のAsynctaskクラスのオブジェクトを作ることは良い考えではないことを知っています。それは無限ループの中にありますが、oncancelled()を呼び出す停止ボタンで実行を取り消すことができれば、 、それは私のために働くかもしれない..

これに関して私を助けてください。

答えて

0

asynkTaskをキャンセルすると、アクティビティで呼び出された外側のasynckTaskだけがキャンセルされていますが、asyncTaskの他のインスタンスを再帰的に実行すると、それらをすべて取り消して全部を止めさせる。

なぜあなたはdoInBackground()中から、あなたのコードを削除し、メソッド内に置くと、次のようにdoInBackground()内側からそれを呼び出すことはありません:

protected Void doInBackground(Object... params) { 
while(!isCancelled()){ 
//call the method 
} 
return yourReturnType; 
} 
関連する問題