2012-07-18 5 views
1

TextView를 업데이트하는 CountDownTimer가 있지만 뒤로 단추를 누르면 중지됩니다.뒤로 단추를 눌렀을 때 CountDownTimer가 계속 실행되는 방식

CountDownTimer timer = new CountDownTimer(600000, 100) { 

    public void onTick(long millisUntilFinished) { 
     calendar.setTimeInMillis(millisUntilFinished); 

     cron.setText(sf.format(calendar.getTime())); 
    } 

    public void onFinish() { 
    } 
}; 

뒤로 버튼을 누르면 어떻게 작동을 유지할 수 있습니까?

추신 : 나는 또한 타이머가 시작될 때 GPS 서비스를 시작합니다. 서비스에 CountDownTimer를 넣을 수있는 방법이 있습니까?

답변

2

타이머가 Activity의 수명주기를 초과하여 살아야하는 경우에는 해당 타이머가 속하지 않습니다. Service 또는 메모리에 상주 할 수있는 다른 객체 (예 : 싱글 톤)에 배치 할 수 있습니다.

+0

이 경우 가장 좋은 것 : 싱글 톤 또는 서비스? – fonini

+0

신청서에 맞는 것이 무엇이든지. 옳고 그른 것은 없습니다. 시스템은 수명주기를 관리 할 수 ​​있기 때문에 서비스가 좋지만 응용 프로그램이 원하는 것 이외의 서비스 일 수도 있습니다. – Devunwired

0

저는 카운트 다운 타이머를 서비스에 넣어야한다고 생각합니다. 서비스에 인 텐트를 전송하여 타이머가 시작되도록 트리거 할 수 있습니다. 또한 콜백이나 인 텐트 또는 메신저와 같은 메커니즘을 사용하여 업데이트 시간을 UI로 다시 전달해야합니다.

0

뒤로 버튼을 무시한 다음 홈 버튼과 같이 작동하게합니다. 이런 식으로 당신의 활동은 결코 파괴되지 않습니다. 즉, 나는 이것이 "좋은 습관"이라고 생각하지 않는다고 말했다.

내가 말하는 것은 당신의 활동 수업에 배치하는 것입니다.

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

최적화 작업을 수행 할 때 TextView가 화면에 표시되지 않으면 TextView가 업데이트되지 않도록해야합니다. 이렇게하면 배터리 수명을 절약하고 가비지 콜렉션을 줄이는 문자열 생성을 막을 수 있습니다.

1

prashant와 Devunwire가 지적했듯이 서비스를 사용해야합니다. 바인딩하기 전에 startService()으로 전화를 걸면 통화 활동이 삭제 된 경우에도 서비스가 계속 유지됩니다.

타이머가 완료된 후에 서비스가 자체적으로 stopSelf()과 함께 멈추고 무엇을해야하는지 확인하십시오.

+0

편집 : 앱을 제대로 종료 할 수 없기 때문에 뒤로 버튼을 무시하지 않습니다. –

+0

타이머를 서비스로 옮겼지만 TextView가 업데이트되지 않습니다. 서비스에서 cron.getText()를 수행하면 값을 인쇄합니다. 그러나 UI에서는 업데이트되지 않습니다. – fonini

+0

흠 잘 모르겠습니다. 당신이 서비스에서 가치를 얻으면 분명히 위젯에 접근 할 수있다. 아마도 당신은 뷰에서'invalidate()'를 호출해야 할 것이다. 메신저를 사용하여 서비스에서 활동으로 메시지를 보내지 만 그 앱은 시간이 중요하지 않았습니다. 그것이 얼마나 빨리 시도해야합니다. 결과를 말해줘! –

관련 문제