Timer timer = new Timer();  
    TimerTask task = new TimerTask() {  
          
        @Override  
        public void run() {  
         Log.i("1234" ,"------------stop");        
            chronometer.stop();
         Toast.makeText(this, showString, Toast.LENGTH_SHORT).show();
        } 
        
    }; button = (Button) findViewById(R.id.button_start);
button.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
chronometer .setBase(SystemClock.elapsedRealtime ()); 
                chronometer .start();
                    
                Handler handler = new Handler();  
                handler.post(new Runnable() {  
                      
                    @Override  
                    public void run() {  
                        timer.schedule(task, 1000);  
                    }  
                }); 
}
});
定时结束后,我想加个提示信息为什么直接出错了

解决方案 »

  1.   

     Toast.makeText(this, showString, Toast.LENGTH_SHORT).show();
    this指上下文! Toast.makeText(***Activity.this, showString, Toast.LENGTH_SHORT).show();
      

  2.   


    //使用Timer来监测时间
    Timer mLoginTimer = new Timer();
    TimerTask mLoginTimerTask = new TimerTask() {
    @Override
    public void run() {
    //没过10秒程序进一次这里
    }
    }
    };
    mLoginTimer.schedule(mLoginTimerTask, 0, 10 * 1000);
      
                    //如果不需要的话释放掉
    if (mLoginTimerTask != null) {
    mLoginTimerTask.cancel();
    mLoginTimerTask = null;
    }
    if (mLoginTimer != null) {
    mLoginTimer.cancel();
    mLoginTimer.purge();
    mLoginTimer = null;
    }
      

  3.   

    这个是典型的线程安全问题,android中在除了UI线程以外的其它线程中是不允许更新UI的操作的,Toast.makeText(this, showString, Toast.LENGTH_SHORT).show();这句话是不能直接加在TimeTask线程中的,可以用直接用Handler post来处理,不需要Timer.你的程序改成:Handler handler = new Handler();
    handler.post(delay, 1000);
    private Runnable delay = new Runnable(){
        public void run(){
            chronometer.stop();
            Toast.makeText(this, showString, Toast.LENGTH_SHORT).show();
        }
    }
    效果应该就是楼主想要的定时1秒后,显示toast。
      

  4.   

    还有刚才没注意,post只是把消息放到主线程的消息队列就返回了,因此处理的话还需要看在消息队列中的位置。因此这个只是1秒后把消息放入消息队列。需要等主线程处理完之前的消息才能处理它,所以最后在程序中放到最后去post。