2012-09-21 6 views
0

앱을 개발 중이며 응급 복구 기능을 넣어 앱을 다시 시작하고 싶습니다. 나는 이것과 관련된 어떤 코드도 작성하지 않았다. 내 생각은 상태를 모니터링하는 서비스를 시작하는 것입니다. 이 접근 방법을 기반으로 문제는 서비스가 내 앱에서 시작되기 때문에 앱이 죽으면 죽을 것입니다. 내 앱에서 서비스를 시작하고 앱을 독립적으로 실행하여 내 앱을 모니터링하고 다시 시작할 수 있습니까?크래시 복구 android app

답변

1

설명하는 문제에 접근하는 데는 여러 가지 방법이 있습니다. 아마도 가장 간단한 방법은 프로젝트에 사용자 정의 Application 클래스를 제공하고 onCreate() 메서드에서 Thread.setDefaultUncaughtExceptionHandler(this);을 호출하여 클래스를 기본 예외 처리기로 할당하는 것입니다. 그러면 충돌 할 때 호출 될 public void uncaughtException(Thread t, Throwable e)을 다시 정의해야하며 재시작을 예약 할 수 있습니다.

프로세스 모니터링 이외의 기능을 원한다면 응용 프로그램에서 자체 프로세스를 갖도록 정의 된 서비스가 있습니다. 이것은 AndroidManifest 속성으로 수행됩니다.

또 다른 옵션은 Android AlarmManager를 사용하는 것으로, 시스템에서 처리하고 응용 프로그램을 다시 시작할 수 있습니다.

+0

AlarmManager 내 앱이 예정된 경우 해결책이 될 수 있다고 생각합니다. Thread.setDefaultUncaughtExceptionHandler 사용 하나의 장소에서 예외 처리를 사용하면 사용할 수 있습니다. 나에게 서비스를 사용하는 것은 좋은 생각이다 : 나는 이것을 발견했다 [link] (http://stackoverflow.com/questions/7254720/how-to-restart-an-activity-automatically-after-it-crashes?rq=1) 유용합니다. 그러나 저는 다른 접근법을 듣고 싶습니다. – learner

+0

유스 케이스에서 AlarmManager를 사용하면 앱이 시작될 때 다소 지연되면서 알람을 예약합니다. 해당 알람이 울리면 앱이 실행 중인지 확인한 다음 (필요한 경우 다시 시작) 다음 알람 일정을 다시 예약합니다. 앱이 정상적으로 종료되면 현재 알람이 제거됩니다. 이 사용 사례는 앱이 시작될 때 시작하고 앱이 완료되는 즉시 중지하기 때문에 중지되지 않은 모델에 적합합니다. – mah

-3

android.intent.action.BOOT_COMPLETED 액션으로 인 텐트 필터를 등록하여 전화 부팅시 서비스를 시작할 수 있습니다. 더 많은 정보는 here 또는 이와 유사하게 찾을 수 있습니다. question

+0

-1 :이 답변은 응용 프로그램 충돌/재시작과 관련이 없습니다. – mah

+0

응용 프로그램의 상태를 확인하는 실행중인 서비스와 관련이 있습니다. 왜 AlarmManager가 Service보다 나은가? 그리고 응용 프로그램에 스레드가 두 개 이상있을 수 있습니다. – marwinXXII

+0

AlarmManager가 서비스보다 뛰어나다는 말을하지 않았지만 다른 옵션이라고 말했습니다. 그러나 응용 프로그램이 보류중인 경보를 깨지 않고 중단 될 수 있으므로 더 좋습니다. 더 중요한 것은 질문이지만, 질문은 그러한 서비스 (BOOT_COMPLETED는 대답 임)를 시작하는 방법이 아니라 오히려 가능성에 관한 것입니다. 당신의 대답은 그가 결코 말하지 않은 장치 부팅시에 뭔가를 시작하기를 원한다고 가정합니다. 그는 앱 크래시 복구를 원한다고 말했습니다. BOOT_COMPLETED는해야 할 일보다 훨씬 오래 걸리고 자원을 낭비하며 사람들의 전화 속도를 저하시키는 것을 제안합니다. – mah