2010-07-24 8 views
6

정상입니다.뒤로 버튼을 누르면 onStop()이 호출되지 않습니다.

워드 프로세서

라고는 "ONSTART() 및 중지시() 표시되어 사용자에게 숨겨진되는 사이 활성 대체물로서 방법이 여러 번 호출 될 수있다"

내가 다시 버튼을 누르면 이전 활동으로 완전히 되돌아갑니다.

여기에 무슨 일이 일어나고 있습니까?

+0

onStop 방법을 추적하는 데 사용하는 관련 코드 스 니펫을 표시 할 수 있습니까? – Cristian

답변

0

onStop()이 아니라 onPause()를 원합니다. onStop은 시스템의 메모리가 부족할 때 활동이 소멸되기 직전에 호출됩니다. onPause는 사용자가 활동에서 벗어날 때마다 호출됩니다. http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle의 다이어그램을 참조하십시오.

+6

다이어그램에 "활동이 더 이상 보이지 않습니다"라고 표시되고 onStop()이 발생하므로 "더 이상 볼 수 없다"는 것은 무엇을 의미합니까? 나는 활동으로가는 것이 더 이상 보이지 않는다는 것을 의미한다고 생각했을 것입니다. – jax

+0

내 이해에서, 안드로이드는 "전경의 다른 활동"(onPause가 호출되었지만 활동이 VM을 가지고 계속 작동 함)과 "활동이 더 이상 보이지 않기 때문에 더 이상 볼 수 없다"를 구분합니다. " onStop, 나중에 onDestroy가 호출 됨). 따라서 onPop은 활동이 숨겨 질 때마다 즉시 호출되지만 onStop은 덜 자주 호출됩니다. 이것은 단지 내 물건을 잡는 것입니다, 그리고 아마 다소 부정확하지만, 안드로이드 워드 프로세서는 "onResume에 대한 호출과 onPause에 해당하는 호출 사이에서 활동의 전경 (foreground) 수명이 발생합니다."라고 말합니다. – QRohlf

+0

내 활동이 단일 사용만을위한 경우 어떻게해야합니까? 종료 할 때마다 VM을 종료하고 onPause를 호출 할 때 ... 내 질문은 http://stackoverflow.com/questions/13928591/a-strange-behavior- 조각의 목적 - – aProgrammer

0

새 인스턴스를 만들 때 활동 인스턴스에 대한 호출을 계속해야하는 경우 this hacky solution을 사용할 수 있습니다. #onStop() 및 #onDestroy() 대신 #doStopOperation() 및 #doDestroyOperation()에 논리를 구현하기 만하면 재정의 된 메서드에서 super # onStop() 및 super # onDestroy()를 호출해야합니다. 물론이 액티비티를 확장 할 때 AppCompatActivity를 확장 할 필요는 없으며 대신 일반 액티비티를 사용할 수 있습니다. 이 기능은 제작 환경에서 작동하므로 잘하면 도움이 될 것입니다.

난 당신이 및 이 새로운 인스턴스가 생성되지도을 파괴 정지를 호출 할뿐만 아니라 타이머 해킹을 쓸 수도 있겠죠,하지만 당신에게 달려 있습니다.

2

onStop() 액티비티가 더 이상 표시되지 않을 때마다 호출됩니다. 그래서 뒤로 버튼을 누를 때 onStop()이 실제로 호출됩니다.

간편한 확인 - onStop()/onStart() 콜백에 중단 점을 넣고 디버깅 세션을 실행해야합니다.

그러나 현재 활동의 onStop()은 전환 할 활동의 AFTER onStart()/onResume()이라고 할 수 있습니다.

따라서 첫 번째 활동의 onStop()에서 업데이트하려고 시도했으며 오류가 발생한 두 번째 활동의 onStart()에 업데이트 된 데이터를 가져올 것으로 예상했기 때문입니다.

관련 문제