안녕하세요.
몇가지 테스트들을 해보고 있는데요...

버튼을 누르면
    버튼에 글씨 바꾸고 (Timer start)
    1번 이미지로 리셋 되고,
3초 뒤에
    버튼에 글씨 바꾸고 (Timer Done)
    소리가 나오고,
    진동도 울리고,
    이미지도 2번으로 변경 되는 테스트입니다.

생각하는대로 동작을 안해서 이래저래 디버깅 해보니..
첫번째 view를 참조하는 명령까지는 동작을 하는데, 화면 refresh가 안되는거 같습니다.
    -> 아래 코드를 실행시키면 3초뒤엔 아무런 변화도 없지만,
         status bar를 잠시 움직여서 화면을 강제 refesh하면 버튼 text는 Timer Done 으로 변경되는것을 확인하였습니다.
         하지만 그 이후로는 실행이 안됩니다.(디버그에서도 그리로 넘어가질 않아요..)

코드 나갑니다.~

    private void timerToggle() {
     if(timerToggle == false) {
      timerToggle = true;
      timerTest = new Timer();
   buttonTimer.setText("Timer Start");
   imageViewTimer.setImageResource(R.drawable.glass_circle_red);
      timerTest.schedule(new TimerTask() {
 
    @Override
    public void run() {
     buttonTimer.setText("Timer Done");
     spTest.playSound(0);
     vibTest.vibrate(10);
     imageViewTimer.setImageResource(R.drawable.glass_circle_aqua);
    }
      }, 3000);
     } else {
      timerToggle = false;
      if(timerTest != null) {
       timerTest.cancel();
       timerTest = null;
      }
     }
    }

위 함수가 버튼 클릭 될 때마다 호출됩니다.

timer 의 run 함수 내부에서 view를 참조할 때 뭔가 방법이 필요한 건가요?
Java 고수분의 도움이 필요합니다..

그리고 클릭시마다 run 함수를 변경해주려면 제 방법처럼 매 번 Timer를 처음에 new Timer로 만들어 주는게 좋은 방법일까요?
아니면 외부에서 new Timer로 생성해 주고, 버튼 토글로는 TimerTask만 고쳐서 schedule(TT) 해주는게 현명한 방법일까요..?

Timer 재사용에 대해 좋은 방법도 좀 추천 부탁드립니다.