2017-11-17 17 views
0

私はこのスレッドを持っている:停止スレッドのRunnable不可能

myThread = new Thread(new Runnable() { 
        public void run() { 

         ServerSocket ss = null; 

         while (!end) { 

          final String incomingMsg; 
          try { 
           ss = new ServerSocket(2201); 
           ss.setSoTimeout(15000); 
.. some code ... 
    } 
       }); 
       myThread.start(); 

は、今私は、ボタンを何も仕事でこれを停止する必要があり、私のようないくつかのコードを試してみました:

Handler handler= new Handler(); 
handler.removeCallbacks(myThread); 
myThread.interrupt(); 

でもないスレッド停止=(

+0

myThread.stop();動作しません?? – Simo

+0

.Stopは時代遅れであり、仕事ではない=( –

+0

なぜあなたは 'end'変数の値を変更しないのですか?end = true; – diegoveloper

答えて

0

回答が正しくありません。 Androidは起動するスレッドを管理することは何もしませんが、起動します。

技術的に言えば、スレッドは「停止」できません。彼らは中断することができます。スレッドを中断することは、フラグが設定されていることを意味し、スレッドの実装では、run()メソッドを検討して終了する必要があります。例えば、

Thread t = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     while (!Thread.currentThread().isInterrupted()) { 
     // Do stuff 
     } 
    } 
    }); 

次に、あなたのスレッドを「停止」して後でt.interrupt()を呼び出すことができます。

スレッドの実装で中断されたフラグを無視すると、スレッドは停止しません。たとえば、上記の// Do stuffSystemClock.sleep(Integer.MAX_VALUE)に置き換えた場合、スレッドは中断されることなく終了しません。

SDKで実装されているIO操作の多くは、中断されたフラグにも注意を払います。そのため、IOのブロックに参加しているスレッドを中断することができます。 InterruptedExceptionを参照してください。

1

あなたはAndroidが必要に応じて自動的にスレッドを停止します。

yコード内のコード実行を中止するだけですbooleanまたは何かを使用

+1

このアンサーは正しくありません。あなたが起動したスレッドを管理するためにAndroidは何もしません。詳細については私の答えをご覧ください。 –

0

.stop()を使用することはできますが、非常に悪い習慣であり、トラブルが発生する可能性があります。 .run()内にブール値を追加してみてください(ウィザードのように)

+0

.stopは非推奨です=) https://stackoverflow.com/questions/16504140/thread -stop-deprecated –

+0

私の悪いです。私は.stop()をかなり長い時間使用していません。幸運にも実用的なソリューションを見つける。 –

関連する問題