如何取消TimerTask的次数

时间:2013-04-23 09:42:22

标签: android

我想在appWidget上指出简单的动画。

动画由2位图组成。

Resources r = getResources();
         Bitmap ani[] = {BitmapFactory.decodeResource(r, R.drawable.anime1),BitmapFactory.decodeResource(r, R.drawable.anime2)};

有计数器

int counter = 0;

这里是TimerTask中的run方法。

    @Override
            public void run() {
                AppWidgetManager awm = AppWidgetManager.getInstance(getApplicationContext());
                ComponentName cn = new ComponentName(getApplicationContext(), sample.class);
                RemoteViews rv = new RemoteViews(getApplicationContext().getPackageName(), R.layout.mainlayout);
                rv.setImageViewBitmap(R.id.material, ani[counter]);
                awm.updateAppWidget(cn, rv);
counter++;

            }

当我与他们一起执行timer.schedule时, 我怎么能停止这个计数器== 2?

4 个答案:

答案 0 :(得分:2)

我不确定你需要什么。我假设如果计数器达到2,你需要取消。

    int count=0;
    _t = new Timer();
    _tv.setText(""); 
    _t.scheduleAtFixedRate( new TimerTask() {
            @Override
            public void run() {
                _count++;

                runOnUiThread(new Runnable() //run on ui thread
                 {
                  public void run() 
                  { 

                      _tv.setText(""+_count);
                      if(_count==2)
                      {
                          _t.cancel();
                      }
                 }
                 });
            }
        }, 1000, 1000 ); 

您也可以使用处理程序。使用计时器任务将创建一个新线程。更新ui应该在UI线程上完成。最好使用处理程序。

答案 1 :(得分:2)

在检查条件后,你应该在timertask运行中停止计时器。

    TimerTask timerTask=new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(counter==2){
        timer.cancel();
        }
    }
};

计时器应该是这样的。

Timer timer=new Timer();
timer.scheduleAtFixedRate(timerTask, when, period);

希望这会对你有所帮助。

答案 2 :(得分:0)

if(counter == 2)
{
    timer.cancel();
}

答案 3 :(得分:0)

不要使用TimerTask,而是使用Handler代替此类任务