2011-08-02 5 views
0

私は非同期で実行されているコードを持っており、メインスレッドから呼び出されています。メインスレッドは複数回呼び出すことができます。私は、メインスレッドを介して新しいインスタンスを開始するとすぐに破棄する非同期タスクの初期の実行を終了します。他が起動している場合に1つのタスクを終了する必要があります

JavaでAsyncTaskのキャンセルを使用して試しました。しかし、カルテルはdoInBackground(params ..)の後でしか動作しません。だからこれは動作しません

何らかの方法で達成できますか?私はこの非同期タスクをスレッドに入れてみました。しかし、スレッドによって開始された操作を取り消す方法を知らないでください。

+1

何?投稿コード – Randroid

答えて

0

スレッドでは、ブール値を実行して、を宣言してください。次に、ステートメントを実行している間に、doInBackground & onPostExecuteの実行をにラップします。 asynctaskへの参照を、nullでない場合はfalseに設定してください。これは古いタスクを強制終了します。次に、新しいものを作成します。

*編集:それはだからここ早期

0

を完成させ、私が意味する、古いタスクを殺すことでは行く:

  • タスクのそのタイプの1つのクラスメンバを宣言する必要があります:private MyTask mMyTask
  • doInBackground()メソッドでは、タスクがキャンセルされたかどうかを時々チェックする必要があります。あなたのタスクをキャンセルしたいときにfor loopを持っている場合は、ほとんどがこのようfor(int i=0;i<0;!isCancelled();i++)またはwhileループでwhile(myCondition && !isCancelled()){...}
  • をそれを行います次のようにしますuは、これまで行ってきたmMyTask.cancel(); mMyTask=new MyTask(); mMyTask.execute();
+0

私はdoInBackground()でisCancelled()のチェックを行っていました。私はそれをチェックするためにdoInBackground()のスレッドを実行しています。しかし、私はキャンセルを検出した後からdoInBackground()から戻る方法を知らない。 – Ajn

関連する問題