2013-07-17 2 views
3

내 응용 프로그램이 강제 종료되었거나 충돌했거나 정상적으로 종료되었는지 확인해야합니다. 내 질문은 : 당신은 어떻게 안드로이드 환경에서 그런 일을하겠습니까? 예외 처리는 쉽고 Thread.setDefaultExceptionHandler 만 바꾸면됩니다. 어려운 부분은 다음과 같습니다. 강제 종료를 "정상"(예 : 뒤로 누르기, 홈 버튼 + 많은 시간 등)과 어떻게 구별 할 수 있습니까?Android 애플리케이션이 강제 종료되었는지 확인하는 방법은 무엇입니까?

이유는 다음과 같습니다. 로컬 데이터베이스의 내용을 서버와 동기화 할 수 있습니다. 그리고 우리는 상태 1에서만 주 활동을, 상태 2에서는이 작업을 허용 할 좋은 이유가 있습니다. 그러나 주 활동의 상태 2에서 사용자가 프로그램에서 db 관련 의미 오류를 발견하면, 그 또는 그녀는 거기에서 찔릴 수있다.

우리는 수신 통화 중단 및 기타 구성 변경에 대비합니다. 따라서 애플리케이션이 상태 2에서 멈춘 상태에서 앱을 강제 종료했다가 다시 열면 계속해서 사용자가 2 단계로 이동합니다.

힘을 다해서 1 단계로 돌아가서 데이터베이스를 동기화 할 수 있도록 사용자를 위해 길을 떠날 것이므로 대다수의 작업을 저장할 수 있습니다. .

답변

3

불행히도 방법이 없습니다. 사용자 나 시스템이 응용 프로그램을 강제 종료하면 전체 프로세스가 단순히 중지됩니다. 이런 일이 발생했음을 알리는 콜백이 없습니다. onDestroy()도 호출 할 수있는 것은 아닙니다. 그 문서에 설명되어 있습니다 : "There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it ..."

+0

그리고'getRuntime(). addShutdownHook' 또는 그와 유사한 것. 나는'안드로이드에서 애플리케이션 라이프 사이클에는 VM 종료가 포함되지 않기 때문에이 메소드를 호출해도 코드가 실행되는 것을 보장 할 수는 없다. 그러나 아무도 그것이 언제 호출되는지 알려주지 않는다. 내가 사용할 수있는 메소드가 없다. ? – Hegi

+0

@Hegi 내가 말했듯이 보장 된 방법이없고 목적을위한 방법도 없다. –

0

아마도 시스템 종료시 제거하는 시작시 파일을 쓸 수 있습니다. 응용 프로그램이 시작되고이 파일이 있으면 강제 종료 된 것으로 결론 내릴 수 있습니다.

+0

이 답변을 유효하게하려면 Android OS에서 "종료"를 정의해야합니다. – Selvin

+0

이것은 처음 생각했지만 위에서 언급 한 유일한 보증 된 메소드는 onPause이며, 불행하게도이 메소드는 사용자가 홈 키를 누를 때 호출됩니다. – Hegi

관련 문제