SCENARIO :
사용자가 글고로 45 (분)을 입력하고 "OK"버튼을 누르면 ..
후 45 분 보유 통과, 나는 코드의 블록을 실행하고 싶다.
나는 이것을하기 위해 2 가지 다른 방법들 사이에서 토론 해왔다. - 무엇이 가장 좋은가 & 왜?
옵션 # 1 - 알람 관리기 -> PendingIntent -> 텐트 -> BroadcastListener
어떤 구현이 가장 좋습니까? 시간에 사용자가 설정 한 시간 후 코드를 발생하는 2 가지
int timeValue = Integer.parseInt(editText_timer_value.getText().toString());
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, TimerReceiver.class);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(this.getApplicationContext(), 234324243, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + (timeValue * 60000), pendingIntent);
finish();
// TimerReceiver.class fires when the time is up, and contains additional Code.
(OR)
OPTION # 2 - 텐트 -> 의도 기타 -> 서비스 -> CountDownTimer
String timeValue = editText_timer_value.getText().toString();
Intent intent = new Intent(this, TimerService.class);
intent.putExtra("TIMER_VALUE", timeValue);
getApplicationContext().startService(intent);
finish();
// TimerService.class starts immediately and runs a CountDownTimer from intent Extras
"더 나은"또는 "올바른"입니다 구현 SO, 및 왜?
감사합니다. :)
추신 : 다른 제안도 매우 환영합니다!
내 질문에 대한 통찰력을 가져 주셔서 감사합니다 .. 내 Alarm Manager 구현이 정확한 것 같습니까? 다시 말하지만, 다음을주지하십시오 : 사용자는 타이머가 백그라운드에서 실행되는 동안 알람이 설정되는 시간 (사용자가 선택하는 분 수)을 입력 한 다음 활동 창이 닫힙니다. 그래서 타이머가 어떻게 든 중단되지 않도록하고 싶습니다. 전화가 재부팅되면 괜찮아요.하지만 그 외에는 타이머가 어떻게 든 죽지 않았는지 확인하고 싶습니다. 그렇다면 옵션 # 1이 최선의 선택이라고 생각하십니까? – StudioB
문서를 살펴보면 AlarmManager를 사용하여 일정 시간이 경과 한 후에 일부 작업을 수행해야 할 때 수행 할 것을 제안하는 내용과 ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC, RTC_WAKEUP. 그래서 여기서 네 가지 유형이 다르게 행동하기 때문에 매우 조심해야합니다. 그래서 약간의 실험을하고 문서에서 그것들에 대해 배우면 당신의 필요에 가장 잘 맞는 것을 알 수 있습니다. https://developer.android.com/training/scheduling/alarms.html – xFighter
두 가지 최종 질문 .. 알람 관리자'.set'의 확장이 ('alarmManager.set'에서와 같이) 위의 예에서 코드에서 넘어 섰습니까? 그것은 감가 상각 될지도 모른다. 그것은 그 경우 다 ?? 이것은 문제를 일으킬 수 있습니다. 그리고 마지막으로, 그것은 ive가 다른 모든 것을 올바르게 구현 한 것처럼 보입니까? 예를 들어 사용자 입력의 정수 'i'에 60,000을 곱해서 ms를 분으로 만들면 문제가 발생할 수 있습니다. 'int'가 아닌 'long'이어야합니까? 또는 내 예제처럼 'int'를 사용하여 여전히 작동합니까? 이 두 가지 문제가 모두 괜찮은지 확인하고 싶습니다. ..... – StudioB