2012-04-24 13 views
0

アクティビティが開始され、次のアクティビティに移動するタイミングを確認するスレッドが作成されます。しかし時々私はこの活動を必要とし、それ自体を殺す。 onPauseはこれを行いますが、そのスレッドがまだ生きていて、時間がたってから新しいアクティビティを開始します。このスレッドを終了してgoToFinalsの意図を停止することは可能ですか?新しいアクティビティで実行中のスレッドを殺す方法

public class Questions extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String in = getIntent().getStringExtra("time");   
     long tmp = Long.parseLong(in); 
     endTime = (long) System.currentTimeMillis() + tmp; 

     Thread progress = new Thread(new Runnable() { 

      public void run() { 
       while(endTime > System.currentTimeMillis()) { 
        try { 
         Thread.sleep(200); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
       Intent goToFinals = new Intent(Questions.this,End.class); 
         startActivity(goToFinals); 
      } 

     }); 
     progress.start(); 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     finish(); 
    } 
} 

答えて

2

スレッドを停止するにはいくつかの方法があります。あなたはThreadオブジェクトを格納した場合、あなたはそれにinterrupt()を呼び出すことができます。

progress.interrupt(); 

これは、あなただけのスタックトレースを出力しない、から返す必要がありInterruptedExceptionスローするsleep()を引き起こします。その後、

// it must be volatile if used in multiple threads 
private volatile boolean shutdown; 

// in your thread loop you do: 
while (!shutdown && endTime > System.currentTimeMillis()) { 
    ... 
} 

// when you want the thread to stop: 
shutdown = true; 
0

安全にあなたが最初thread_instance.interrupt呼び出す必要がありますスレッドを(終了するために)と:あなたはまた、シャットダウンフラグのいくつかの並べ替えを設定することができ

while(endTime > System.currentTimeMillis() 
    && !Thread.currentThread().isInterrupted()) { 

:あなたはまた、のようなループを行う必要があります中断されているかどうかを確認することができます。 これを参照してください。LINK

0

this投稿を参照してください。彼らは、バックグラウンドスレッドを停止するようにフラグとして共有変数を使用することをお勧めします。この変数は、スレッドの終了を要求する別のオブジェクトによって設定できます。

関連する問題