6

特定のスレッドを強制終了したいのですが、それを機能させる方法がわかりません。重要ではないように思われる場合でも、次にすべての情報を含めます。

アクション バー sherlock を使用しており、アクション ボタン イベントでスレッドを強制終了したいと考えています。ので、私は持っています:

    Thread myThread;
    myThread = new Thread(new Runnable(){
        public void run(){
                functionX();
        }
      });
    myThread.start();

このスレッドは実行時間の長いスレッドであり、funcionX() はいくつかの新しいスレッドも作成します。次の場合にスレッドを強制終了したい:

   public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {

    case android.R.id.home:
        myThread.interrupt();
        break;
    };

Future の結果と Future.cancel に submit(runnable) を使用して ExecutorService を試しましたが、うまくいかないようです。また、functionX() は http get リクエストを使用して JSON サービスからデータを取得することにも言及する必要があります。

4

3 に答える 3

5

これを行うには複数の方法がありますが、そのうちのいくつかは次のようになります

  1. Thread の代わりに TimerTask を使用し、timeTask.cancel() を呼び出します - 割り込み用
  2. スレッドの run() メソッドで、ブール値をチェックし続けて、スレッドを終了する必要があるかどうかを判断してから、割り込みを呼び出すか、例外をスローすることをお勧めします。
于 2012-11-09T16:07:04.080 に答える
0

Option 2 from rock_win is the way to go, you can see why here with some code attached:

http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html

于 2012-11-09T16:16:57.230 に答える