0

조각에서 countdowntimer를 실행 중이며 뒤로 버튼을 누를 때마다 onDestroy()이 호출되고 카운트 다운이 종료됩니다. 앱을 다시 시작하면 새로운 활동이 시작되고 카운트 다운이 종료됩니다.countdowntimer가 활성화 된 상태에서 뒤로 버튼을 호출하면 onDestroy()가 호출됩니다.

onDestroy() isFinished()true입니다.

홈 버튼을 누르면 이런 일이 발생하지 않을 것입니다.

어떻게 이런 일이 발생하지 않도록 할 수 있습니까? 서비스를 사용 하시겠습니까? 플래그를 설정 하시겠습니까? 뒤로 버튼을 무시 하시겠습니까? 나는 여기에서 길을 잃는다.

답변

0

활동의 파괴가 당신의 통제를 벗어나 -

또한이 상황에서 도움이 될 것 알람 관리기를 살펴 걸릴. 그것은 완전히 가비지 수집기에 따라 다릅니다. 메모리를 정리해야하고 활동이 백그라운드에 있다면 가장 가능성이 높습니다.

서비스가 불완전하게 필요할 때만 소멸되도록하려면 startForeground(...)과 함께 서비스를 사용해야합니다. 또한 화면이 잠겨있는 동안 계속 유지하려면 서비스에 WakeLock을 획득하는 것을 잊지 마십시오.

+0

전경 서비스가 작동하려면 WakeLock이 필수적입니까? 나는 수업 시간에 시작 시간을 저장 한 이후로 모든 틱에 의존하지 않습니다. 하지만 그건 내 경보를 유발할 것이기 때문에 마지막 틱에 의존하고 있습니다. – aelveborn

+0

'WakeLock'이 없으면 화면 잠금을 해제 할 때까지 서비스가 아무 것도하지 않으므로, 발생했을 때 마지막 틱을 처리 할 수 ​​없습니다. PARTIAL_WAKE_LOCK이 필요합니다. 화면을 계속 유지하지는 않지만 서비스가 제대로 실행될 수 있습니다. –

+0

또한 간단한 카운트 다운으로 인해 전력 소비가 눈에 띄게 달라지지 않으므로 배터리 사용에 대해 걱정할 필요가 없습니다. –

0

이 접근법으로 정상적인 Android 라이프 사이클을 깨고 있습니다. 사용자가 무엇을 선택 했든간에 앱을 나가기를 원하기 때문에 사용자가 뒤로 밀면됩니다.
하지만 어쨌든 onBackPressed를 재정의하는 동작을 피하고 뒤로 키가 홈 키처럼 작동하도록 할 수 있습니다. 여기 좀 봐 Override back button to act like home button

+0

내 마지막 옵션이 될 것 같아요. garbagecollector가 내 활동을 파괴 할 수있는 옵션을 여전히 남겨두고 있기 때문입니다. – aelveborn

0

뒤로 버튼을 누르면 활동/프로세스가 파괴됩니다. 따라서이 타이머를 실행하는 것이 매우 중요하다면 을 사용하려면 Foreground Service (상수는 Notification이어야 함)을 사용하십시오. A Foreground Service은 파괴 할 수 없습니다. 시스템 메모리가 낮고 재생해야하는 경우 보통 Service이 될 수 있습니다. 내 경험에 의하면 이것은 (특히 새로운 장치에서) 자주 발생하지는 않습니다.

+0

뒤로 버튼을 누르면 반드시 활동을 파괴하지 않고 그냥 백그라운드에두면 가비지 컬렉터가 가까운 장래에 파괴 할 수 있습니다. 또한 포 그라운드 서비스도 파괴 될 수 있으며, 사용 가능한 메모리가 충분하기 때문에 곧 재 작성됩니다. –

0

타이머가 활동 컨텍스트에서 실행 중이므로 활동이 삭제되면 타이머도 실행됩니다. 집을 누르면 활동이 일시 정지 상태가되고, 따라서 다른 활동이 수행됩니다.

필요할 때 시작할 수있는 백그라운드 서비스로 이동하고 활동이 파괴되면 백그라운드에서 계속 실행됩니다. 백그라운드 서비스가 있어도 메모리가 필요할 경우 장치에 의해 여전히 죽을 수도 있으므로이를 처리해야 할 수도 있습니다.

카운트 다운 타이머를 장치 시간과 동기화하십시오. 그런 식으로 서비스가 파괴되면 장치의 현재 시간을 사용하여 카운트 다운 시간을 다시 동기화 할 수 있습니다. http://developer.android.com/reference/android/app/AlarmManager.html

+0

배경 서비스는 좋은 생각 인 것 같지만, 타이머가 완료되면 사용자에게 알려주는 AlarmManager를 결합하고 모든 시스템 시간을 포함하는 객체를 저장하는 것이 좋습니다. AlarmManager와 백그라운드 서비스는 모두 WakeLock이 필요합니다. – aelveborn

+0

웨이크 잠금 장치는 장치 웨이크 잠금 장치가 아니므로 서비스가 알람을 처리 할 때 장치가 종료되지 않도록 보장합니다. 따라서 알람을 듣고 알람이 울리면 앱이 그 일을 시작합니다. 그들을 사용하기 위해 Wake Lock을 표시 할 필요가 없습니다. –