2016-10-12 4 views
2

이것은 항상 Android 라이프 사이클에 대해 혼란스러워했습니다. documentation on Activities에서 표 1과 아래의 텍스트는 onstop()onDestroy()이 호출되지 않을 수도 있음을 나타냅니다. onPause()은 호출 할 수있는 마지막 라이프 사이클 메서드입니다.onStop() 및 onDestroy()가 호출되지 않을 수 있습니다. 그들은 무슨 소용입니까?

onStop()/onDestroy()이 호출되지 않을 수 있습니다.이 메서드는 무엇입니까? 나는 그들이 라이프 사이클에서 어디로 떨어지는지를 인식한다. - 나는 그들이 신호하는 것에 대해 묻지 않는다. 나는 그들이 호출되는 것을 기대할 수 없다면 어떤 코드가 속해 있는지 궁금해한다. 이러한 메서드의 유용성에 대해 묻는 다른 게시물은 리소스를 확보하는 데 사용해야한다고 말합니다. 신뢰할 수없고 버그가 발생하지 않을 것입니다. 이러한 메서드는 결코 호출되지 않을 수 있습니다.

응용 프로그램이 종료되고 해당 메소드가 호출되지 않으면 프로세스 자체가 죽어서 리소스 포인터가 가비지 수집되거나 다른 방법으로 정리 될 수 있습니다. 이 경우 onStop()/onDestroy()은 프로세스가 종료 될 때까지 유지되어야하는 리소스를 정리할 책임이 있습니다. 그러나 그것은 다소 복잡하게 보입니다.

Android가 활동을 종료하기로 결정한 방법에 따라 미묘한 버그 나 리소스 누출이 발생하지 않고 onStop()/onDestroy()을 올바르게 사용하고 안전하게 사용할 수있는 예가 있습니까?

+0

'onStop()'또는'onDestroy()'가 당신의 액티비티에서 호출되지 않으면, 두 가지 중 하나가 일어났습니다 : 전체 프로세스가 종료되었거나 처리되지 않은 예외로 인해 추락했습니다. – CommonsWare

답변

4

응용 프로그램이 종료되고 해당 메소드가 호출되지 않은 것처럼 상상할 수 있습니다. 프로세스 자체가 죽어서 리소스 포인터가 가비지 수집되거나 다른 방법으로 정리 될 수 있습니다. 이 경우, onStop()/onDestroy()는 프로세스가 종료 될 때까지 유지 될 자원을 정리할 책임이 있습니다. 그러나 그것은 다소 복잡하게 보입니다.

이것은 기본적으로 onDestroy()에 적합합니다. 요점은 당신의 프로세스가 살아남을지라도 그 활동이 계속 필요없이 유지하는 것이 낭비 될 자원을 확보해야한다는 것입니다. 이것을 개별 활동 만 파괴하는 경우라고 생각하십시오.

대조적으로 활동을 호스팅하는 프로세스가 종료되는 경우 해당 프로세스가 보유한 리소스를 정리하는 운영 체제입니다. 이것을 이 파괴되고있는 경우로 생각하십시오 (여러 프로세스를 가질 수 있기 때문에 정확하지는 않지만).

운영체제에서 제대로 정리되지 않은 카메라 사용 중 상태와 관련된 문제가 있었지만 현재의 상태는 별개의 문제입니다.

그러나 onStop()의 목적은 다소 다릅니다. 죽음에 이르는 동안 일어날 수 있지만, 이것은 활동의 죽음을 나타내는 것이 아니라 화면에서 활동이 멈추는 것을 나타냅니다. 따라서 시각적 업데이트를 중지하고 관련 리소스를 비롯하여 화면 상태에 연결하려는 다른 동작을 잠재적으로 해제 할 수있는 시간이 될 수 있습니다.

+0

예 : 내 앱에서 몇 초마다 업데이트되는 위치 정보가 포함 된지도를 표시합니다. onStop이 호출되면 위치 업데이트가 중지됩니다. –