2012-10-15 7 views
0

Application 클래스를 확장하고 onCreate 메서드를 재정의하는 응용 프로그램이 있습니다.
내 onCreate에서 AlarmManager를 사용하여 5 분마다 실행되도록 서비스를 예약합니다.
로그에서 응용 프로그램을 다시 시작한 것처럼 잠시 후에 onCreate get이 다시 호출되는 것을 볼 수 있습니다.
내 서비스가 첫 번째 실행과 동기화되지 않습니다.
이 문제를 방지하고 응용 프로그램의 onCreate에서 코드를 보장하는 방법은 정확히 한 번만 실행됩니다 (물론 응용 프로그램이 사용자에 의해 명시 적으로 닫히지 않는다고 가정).Application.onCreate가 두 번 이상 호출되었습니다.

주셔서 감사합니다 Application

+0

좀 더 구체적으로 말씀해 주시겠습니까? 기기의 방향을 바꾸면 이런 일이 발생합니까? – kittu88

+0

오리엔테이션이 여러 번 바뀐 것 같지만, 응용 프로그램이 백그라운드에있을 때도 마찬가지이며 응용 프로그램이 아닌 활동에 영향을 미쳐야합니다. 로그에서 20 분 이상 동안 몇 번보고 싶습니다. 따라서 구성과 관련이없는 것 같습니다 ... – Oren

답변

0

onCreate() 이 프로세스를 시작의 일환으로 불린다. 로그에서 여러 번 호출 한 것을보고 있다면 프로세스가 실행 사이에 종료 되었기 때문입니다.

+0

AlarmManager가 다시 시작하는 이유는 무엇입니까? 정의 된 간격으로 올바른 서비스 실행을 유지하기 위해 그러한 경우를 방지/감지하려면 어떻게합니까? – Oren

+0

@Oren : "이제 AlarmManager가 다시 시작됩니까?" - 로그에 액세스 할 권한이 없기 때문에 응답 할 수있는 방법이 없습니다. 로그 타임 스탬프에 따라이를 알 수 있어야합니다. "정의 된 간격으로 올바른 서비스 실행을 유지하기 위해 이러한 사례를 방지/탐지하려면 어떻게해야합니까?" -'Application'의'onCreate()'에서 서비스를 시작하지 마십시오. 또는 서비스가 실행되는 시점을 추적하고 (예 :'SharedPreferences'의'lastRunTime' 값) 서비스가 실행 중이 아닌 것으로 판단되면'AlarmManager' 만 시작합니다. – CommonsWare

+0

로그에서 나는 일정 시간 후에 주 활동을 입력 할 때 프로세스가 다시 작성된다는 것을 알 수 있습니다. 즉, 활동을 열기 위해 프로세스가 다시 작성되는 것을 의미합니다. SharedPreferences를 사용하고 싶지 않아 많은 유스 케이스 (예 : 부팅, 작업 관리자에서 닫기 등)를 유지해야합니다. – Oren

관련 문제