2010-11-24 21 views

答えて

2

AsyncTask.cancel(true)メソッドを使用してください。

+0

これは見せかけです。そして、私は5秒後に私のAsyncTaskをキャンセルするためにpostDelayedを使うことができますか?ありがとう。 – bobetko

0

申し訳ありませんが、ここではわかりません。同期スレッドの例を以下に示します。 私の関数listen()は5秒間実行され、終了します。 Listen()はUDPリスナーです...

問題このコードでは、リストされた()が5秒間実行されるまでメインスレッド(応答がなくなった)が停止します。私は私の電話がフリーズするのを避けるために非同期スレッドを使用したいと思います。私が時間をかけて何もできないと言ったとき、私はlisten()関数に何らかのタイマーを入れてから経過時間を測定してから5秒後に終了することはできないと言っていました。それはできません。

Thread t = new Thread() { 
    public void run() { 
     try { 
      listen(); 
     } catch (IOException e) { 
      Log.d(TAG, "IOException (Discovery) " + e); 
      e.printStackTrace(); 
     } 
     synchronized (this) { 
      notifyAll(); 
     } 
    } 
}; 
synchronized (t) { 
    t.start(); 
    try { 
     t.join(5000); // 5 sec 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
+1

'AsyncTask'をセットアップし、' doInBackground() 'メソッドの中でこのコードを実行してください。 –

+0

ありがとうございます。それを試みます。 – bobetko

+0

素晴らしい作品.... – bobetko

3

スレッドを強制的に停止することはできません。あなたができることは停止するようにシグナルを送ること(割り込みの呼び出し()またはフラグを立てる)です。

だから:

  1. スタートは、あなたのワーカースレッドを実行しています。その内部で繰り返し(メインの作業ループ内で)isInterrupted()を確認し、InterruptedExceptionsをキャッチ - この場合スレッドを終了します。

  2. 5秒間実行するTimerTaskを開始してから、ワーカースレッドでinterrupt()を呼び出します。

更新:ポスターは、彼がすでに作業コードを持って、彼はただUIをブロックせずに非同期でそれを実行する必要があることを説明しました。

解決策:AsyncTaskをセットアップし、コードをdoInBackground()メソッド内で実行します。

関連する問題