2012-05-11 6 views
2

Androidのアクティビティでスレッドオブジェクトを使用しました。しかし、これらのスレッドは、アクティビティが破棄されたときには停止しません。スレッドの停止、次のようにのための私のコード:アクティビティがAndroidで破棄されたときに実行中のスレッドを停止する方法はありますか?

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    thread.interrupt(); 
} 

コードの上には、停止中のスレッドオブジェクトのために働いても例外:InterruptedExceptionをスローするだけでなく。例外なく実行中のスレッドを停止する正しい方法は何ですか?


スレッドオブジェクトがInterruptedExceptionをスローするとエラーにはなりませんか?

+0

はこれを試してみてください。http://stackoverflow.com/questions/9699292/how-to-stop-all-worker-threads-in-android-application – idiottiger

答えて

-2

を追加すると、onDestroy()や何か他のボタン(たとえばボタンが押されている)が呼び出されたときにアクティビティが終了するはずです。 onDestroy()を使用するときは、他のすべてが呼ばれた後にsuper.onDestroy();を入れてください。

+0

こんにちは、それは私が仕上げを追加した後、InterruptedExceptionあるを投げ続けるのです()関数呼び出し。私は私のRunnableクラスに何かメソッドをオーバーライドする必要がありますか?ところで、あなたの投稿にクリック-1のボタンがありません – Ack

2

この方法を試してみてください。

volatile boolean stop = false; 

public void run() { 
    while (!stop) { 
    log.v("Thread", "Thread running..."); 
     try { 
     Thread.sleep(1000); 
     } catch (InterruptedException e) { 
     log.v("Thread","Thread interrupted..."); 
     } 
    } 
} 

@Override 
public void onDestroy() { 
    stop = true; 
    super.onDestroy(); 

} 

@Override 
public void onDestroy() { 
    thread.interrupt(); 
    super.onDestroy(); 
} 
+0

スレッドオブジェクトがInterruptedExceptionをスローすると、エラーは発生しませんか? – Ack

0

は、外部からスレッドを停止しようとしているが信頼できるものではありません。

アプリケーション全体でSharePreferencesやアプリケーションコンテキスト(例:IS_APP_ACTIVE)を使用してグローバルパラメータを使用することをお勧めします。
スレッド自体を強制終了します。

あなたの活動に

...私は少し説明してみましょう

protected void onResume() { 
     super.onResume(); 

// isAppActive 
     CommonUtils.setAppActive(mContext, true); 
} 

protected void onPause() { 
     super.onPause(); 

// isAppActive 
     CommonUtils.setAppActive(mContext, true); 
} 

あなたのスレッドで

if (!CommonUtils.isAppActive(mContext)) 

ちょうど糸ループから抜け出します。

0

このように実行します。あなたのスレッドでの活動で

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    thread.interrupt(); 
} 

@Override 
public void run() { 
    // stop your thread 
    if (interrupted()) { 
     return; 
    } 
    // do your work 
} 
-1

我々はスレッドを殺すことはできません。唯一の方法は次のとおりです。

class MyThread extends Thread 
    { 
     void run() 
     { 
    while(bool){ 
      //My code which takes time. 
     } 
    } 
    } 

// --------------------------スレッドを実行するには

MyThread mThread = new MyThread(); 
    mThread.start(); 
今すぐ

スレッドを停止したい場合は、ブール値をfalseに変更してください。

bool=false; 
関連する問題