2016-07-11 7 views
0

スレッドを主スレッドに定期的に戻すスレッドを作成しました。 と私はこのスレッドをいくつかの関数に入れました。2回呼び出すとスレッドをキル

ボタンを押すと、機能が呼び出されて作業が行われます。

問題は、そのボタンを2回押したときです。

2つのスレッドがStringをメインスレッドに送信しているとします。 (まったく同じことですが、別の文字列です)

しかし、スレッドが再び開始されるとき、最初のスレッドは必要ありません。

最初のスレッドを削除する方法はありますか?

ここにコードがあります。

txt_handlerがメインスレッドです。

+0

スレッドを強制終了する必要があるかどうか、またはそのスレッドを強制終了する方法、またはその両方を判断する方法はありますか? –

+0

も、両方とも。私はそれを決定し、殺す必要があります。 –

+2

あなたは本当にスレッドを "殺す"わけではありません。 'Thread'には' stop'や 'destroy'のようなメソッドがありますが、それらは強く推奨されていません。実行可能なスレッドを中断し、中断を確認してできるだけ早く停止できるように実装するだけです。 –

答えて

-1

まず、動作中のスレッドをメソッドから置き換えます。 Than:

private Thread workingThread; 

//..... 

private void speller_textbox(final String string){ 

    if (workingThread != null && workingThread.isAlive()) { 
     workingThread.interrupt(); 
    } 

    final int strlen = string.length(); 
    workingThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      int cursor= 0; 
      while(cursor != strlen){ 
       try{ 
        Message message = Message.obtain(); 
        message.obj = string.subSequence(0,cursor); 
        txt_handler.sendMessage(message); 
        cursor++; 
        Thread.sleep(100); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    thread.start(); 
} 
+0

'workingThread'は、最初の呼び出しの後でも、終了後であってもnullになりません。 – njzk2

+0

@ njzk2 lol?もう一度答えを確認してください... – GensaGames

+0

'interrupt()'が何をしているのか分かりますか? – njzk2

関連する問題