2013-01-10 14 views
6

onCreateで、毎分繰り返すタスクを実行します。ここで私はそれを行う方法:timer.scheduleAtFixedRateは、キャンセルを呼び出すときに停止しません。

myTimer = new Timer(); 
    int delay = 30000; // delay for 30 sec. 
    int period = 600000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 
        wv.reload(); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 

すべてのコードはonCreateにあります。だから、アプリが画面から消えると、私はlogcatでタイマースチールが走っているのを見ることができ、アプリが破壊されない限り止まらない。だから、の活動で私はmyTimer.cancel();と呼ぶが、それは助けにならなかった。私はまだアプリケーションが画面上にない場合でも、logcatのアップデートを見ることができます。だから、timerTaskを停止する方法は?

答えて

4

あなたのコードは私のファイルに入れられています。値は遅延と期間が調整されていますので、長く待つ必要はありません。私はアプリを実行します。 LogCatのメッセージが表示されます。私はギャラクシーS3のホームボタンを押します。その後、メッセージはLogCatで停止します。

public class MainActivity extends Activity { 
Timer myTimer; 
TimerTask doThis; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    myTimer = new Timer(); 
    int delay = 0; // delay for 30 sec. 
    int period = 1000; // repeat every 60 sec. 
    doThis = new TimerTask() { 
     public void run() { 

        Log.v("TImer","repeated"); 

     } 
    }; 

    myTimer.scheduleAtFixedRate(doThis, delay, period); 
} 

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

} 
+0

私はonStopでそれをプッシュし、今は動作しています、それがなぜ動かないのか不思議です... – Daler

+0

Strange。 Log.vはあなたのonPauseメソッドに何かを表示しますか?そうでない場合、間違っていると思われるかもしれません。あるいは、あなたのPが大文字でないか、または別の場所にないかもしれません。実際には呼び出されていません。 –

+0

))私のonPauseは間違って宣言されました...) – Daler

0

スレッドはすでに送信されているため、最後に1回実行される可能性があります。 onLoadで変数をtrueに設定し、onPauseでfalseに設定します。タイマータスクでは、変数がtrueの場合にのみコードを実行します。

新しいif文の外側のログに書き込みます。それが本当にそれを最後に実行しているのなら、それはあなたの解決策かもしれません。しかし、それがonPauseの後で何度も繰り返し実行されているなら、私の解決策をとらないでください。

+0

私もこの方法で試しましたが、うまくいきません。そしてそれは何度も何度も繰り返されます。 – Daler

+0

wv.reload()を除いて、あなたのコードは私のために働きます。 - あなたはその方法で何をしているのか分かりません。アプリを再開させるものなのでしょうか? –

+0

また、OnPauseメソッドにLog.vを入れて、実際に起動されていることを確認できますか? –