마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

TimerTask 중복질문...ㅠㅠ

0 추천
Intent intent = new Intent(MainActivity.this, TimerActivity.class);
                startActivity(intent);
public class TimerActivity extends Activity {
    long IAvailableDate;
    long ILeaveDay;
    Integer mDay,mHour,mMin,mSec;
    TextView timer_text;
    String timer_sec;
    TimerTask timerTask;
    Timer timer;
    private final Handler handler = new Handler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_timer);
        timer_text = (TextView) findViewById(R.id.txt);
        testStart();
    }
    public void testStart() {
        if(timerTask != null){
            timerTask.cancel(); //타이머task를 timer 큐에서 지워버린다
            timerTask=null;
        }
        if(timer!=null){
            timer.cancel(); //스케쥴task과 타이머를 취소한다.
            timer.purge(); //task큐의 모든 task를 제거한다.
            timer=null;
        }
        Calendar gameDate = null;
        gameDate = Calendar.getInstance();
        gameDate.set(2017,02,21,00,00,00);
        IAvailableDate = gameDate.getTimeInMillis();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                Calendar gameDate2 = null;
                gameDate2 = Calendar.getInstance();
                ILeaveDay = IAvailableDate - gameDate2.getTimeInMillis();
                if(ILeaveDay > 0){
                    gameDate2.setTimeInMillis(ILeaveDay);
                    mDay = gameDate2.get(Calendar.DATE);
                    if(mDay > 1){
                        //몇일인지 표현 안하고 시간으로만 표시하기 위해 처리
                        mHour = ((mDay-1)*24)+(gameDate2.get(Calendar.HOUR_OF_DAY)-9);
                    }else{
                        mHour = gameDate2.get(Calendar.HOUR_OF_DAY)-9;
                    }
                    mMin = gameDate2.get(Calendar.MINUTE);
                    mSec = gameDate2.get(Calendar.SECOND);
                }
                Log.i("timerTask객체", String.valueOf(timerTask));
                if(mHour == null && mMin == null && mSec == null || mHour == 0 && mMin == 0 && mSec == 0){
                    timer_sec = "종료";
                }else{
                    timer_sec = "남은시간 "+mHour+" : "+mMin+" : "+mSec;
                }
                Update();
            }
        };
        timer = new Timer();
        timer.schedule(timerTask, 0, 1000);
    }
    protected void Update() {
        Runnable updater = new Runnable() {
            public void run() {
                timer_text.setText(timer_sec);
            }
        };
        handler.post(updater);
    }
}
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@1cce89ac
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@1cce89ac
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@1cce89ac
../timerTask객체: com.timertaskex.TimerActivity$1@18709498
../timerTask객체: com.timertaskex.TimerActivity$1@20fb3a26
../timerTask객체: com.timertaskex.TimerActivity$1@1cce89ac

안녕하세요. 눈팅으로만 찾아보다가 도저히 답이 안나와 질문드립니다..ㅠㅠ 보시는 바와 같이 메인에서 TimerActivity를 호출하여 타이머를 작동시키는데 호출 후 메인액티비티로 돌아가 다시 또 TimerActivity를 호출하면 timeTask객체가 if(timerTask != null) 조건에 걸리지 않고 새로 생성되네요. 그래서 로그를 보시면 timerTask객체가 여러개 생성되버리네요..   찾아본 정보로는 if(timerTask != null) 이렇게 조건을 주어서 기존 객체를 null로 만들고 새로 생성하는거 같은데 왜 안되는지 원인을 모르겠네요..소중한 답변 부탁드립니다

컨제 (160 포인트) 님이 2017년 2월 20일 질문
컨제님이 2017년 2월 20일 수정

1개의 답변

+1 추천
 
채택된 답변
MainActivity 에서 TimerActivity를 호출하면 onCreate를 타고, 당연히 액티비티가 새로 생성됐으니 timer 도 null 상태로 새로 만들어지죠.

onCreate 에 로그 찍어보세요.

onDestroy에도요.
쎄미 (162,410 포인트) 님이 2017년 2월 20일 답변
컨제님이 2017년 2월 20일 채택됨
onDestory에서 체크를 해줬어야 되네요..ㅠㅠ 정말 감사합니다. 쎄미님
덕분에 끙끙 앓던게 해결됐습니다.
감사합니다!
...