2

を使用しTimerて継続的に更新していますが、メソッドTextView中にタイマーを再起動するのに問題があります。とメソッドでonResume()使用timer.cancel()しますが、タイマーを再起動するにはどうすればよいですか?onPause()onDestroy()onResume()

これは私のタイマーコードです...

int delay = 1000; 
int period = 1000; 
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

public void run() {
        //I update the TextView here 
    }

}, delay, period);
4

2 に答える 2

5

より簡単な代替方法は、Handlerクラスを使用することです。タイマークラスはアクティビティのライフサイクルとは関係がなく、潜在的なスレッドの問題を自分で心配する必要があるため、お勧めしません。ハンドラーを使用する利点は、すべてのコールバックがメインスレッドで行われることです(したがって、スレッドの問題を心配する必要はありません)。以下は、これを行う方法の簡単な例です。

 @Override
protected void onCreate(Bundle savedInstanceState)
{
   ....
   mHandler = new Handler();
}

 @Override
protected void onResume() 
{
     mHandler.postDelayed(myRunnable, UPDATE_RATE);
}

 @Override
protected void onPause() 
{
     mHandler.removeCallbacks(myRunnable);
}

 private final Runnable myRunnable= new Runnable() {
    @Override
    public void run()
    { 
       //Do task
       mHandler.postDelayed(myRunnable, UPDATE_RATE);
    }
 }
于 2012-04-16T14:18:54.673 に答える
2

タイマーを再起動しないでください。代わりに、新しいタイマーを使用します。つまり、onResume()内で新しいタイマーを作成します。以前のものを使用しなくなったため、ガベージコレクションが処理します。したがって、onResume()では、次のコードを使用します。

timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

    //update the TextView here 

}

}, delay, period);
于 2012-04-16T14:01:06.263 に答える