2010-11-28 2 views
0

런타임에서 활동이 중단되는시기와 방법에 대해 간략히 설명 할 수 있습니까? 일시 중지 된 상태와 중지 된 상태의 차이점을 알고 싶습니다. 중단 된 활동을 중단하도록 시스템을 강제 할 수 있습니까? 중지 된 것처럼 완전히 똑같은 (메모리 부족) 이유는 무엇입니까?시스템에서 활동을 종료하는 방법에 대한 개요

들어오는 전화 때문에 갑자기 낮은 메모리 상황이 발생하여 활동이 일시 중지 된 경우 시스템은 중지 된 활동의 자원을 해제하기 만합니다. 그러나 어떻게 이루어 졌습니까? finish()를 호출하여 시스템이 "친절하게"물어 보는 경우와 그렇지 않은 경우는 언제입니까? onDestroy()는 여전히 호출됩니다.

+0

[developer.android.com] (http://developer.android.com/guide/topics/fundamentals.html#actlife)의 'Application Fundamentals'섹션에서 활동 라이프 사이클에 대해 자세히 설명합니다. 대부분의 질문에 답해야합니다. –

+0

아니요, 위의 질문에 대답하지 않습니다. 의심 스럽다면 한번보세요. – cody

+0

@cody : Josef가 링크 한 문서를 통해 약간의 시간이 걸리고 * 읽혀지면 안드로이드 애플리케이션 라이프 사이클이 어떻게 작동 하는지를 이해해야합니다. 그러면 다시 질문에 답해야합니다. 불분명 한 것들이 아직도 있다면, 이것에 대해 * 구체적인 * 질문을하는 것이 좋습니다. – Nailuj

답변

4

당신이 물어 본 대부분은 문서에서 꽤 잘 설명되어 있지만, 나는 몇 가지를 명확히 할 수 있다고 생각합니다.

일시 중지 상태와 정지 상태 사이의 차이점을 알고 싶습니다.

시정. 일시 중지 된 활동은 Dialog 테마가 적용된 활동과 같이 다른 활동에 의해 부분적으로 만 가려 질 수 있기 때문에 두 상태가 별개입니다. 시각적 인 상태를 유지하는 데 필요한 모든 리소스를 유지해야합니다. 중지 된 활동은 리소스가 꽉 찼을 때 파괴되거나 보존되는 활동간에 차이를 만들 수있는 리소스를 버릴 수 있습니다.

나는 시스템이 단순히 중지 활동을 능숙를 해제 을 선호 ... 생각합니다. 그러나 어떻게 이루어 졌습니까?

해야합니다. 중지 된 활동은 완전히 보이지 않으므로 사용자가 보는 것에 무엇인가 공헌하는 것보다 더 나은 살인 후보가됩니다. 안드로이드가 일시 중지되었지만 부분적으로 눈에 띄는 활동을 재개 한 것을 보지 못했지만 올바른 상황에서 발생할 수 있다고 생각합니다. 시스템은 각 활동의 상태를 알려주고 있기 때문에 각 활동의 상태를 알고 있습니다.

때 시스템은 마무리()와 하지를 호출하여 활동을 "친절하게 물어"않으며, 경우들의 OnDestroy() 여전히 라는됩니까? 때 수

시스템은 질서 파괴를 할 것입니다,하지만 API는 보장은 활동이 그 어느 onPause()onSaveInstanceState()을 볼 것입니다.

ETA : 활동이 스택에서 제거되는 정확한 원인은 소스에 있습니다. 보편적 인 진실 인 이유에 의존해서는 안됩니다. Android의 차기 버전이 결정을 다르게 할 수 있기 때문입니다.

+0

감사합니다. 그 점이 명확 해졌습니다. 따라서 onDestroy() 및 onStop()이 호출되지 않는 경우가 드물게있을 수 있습니다. – cody

4

파 코스! 값 비싼 잘못된 정보가 섞인 귀중한 정보가 있습니다. 아니요, 온라인 문서는 프로세스가 종료되는 상황을 정확히 지정하지 않습니다. 이는 예고없이 변경 될 수 있으므로 고의적입니다. 물론, onDestroy()가 호출되는 가장 보편적 인 이유는 시스템에 메모리가 부족하다는 것입니다. 새로운 시스템에서는 메모리가 너무 많기 때문에 보편적이지 않습니다. 그러나 이것이 그 유일한 이유라고 보증 할 수는 없습니다.

그렇습니다. Android와 개발자 간의 '계약'은 규칙을 준수하고 필요할 때 필요한 라이프 사이클 콜백을 구현하면 작동하고 어떤 상황에서 정확히 알 필요가 없다는 것입니다 onStop(), onSaveInstanceState() 및 onDestroy()가 호출됩니다.

이제 Google과 달리 계약서의 말씨가 점에서 다소 모호하다는 것을 인정합니다. 이것은 다른 이유로는 포어 그라운드와 같은 표준 산업 의미가있는 용어를 사용하기 때문입니다. 그러나 약간 변경된 감각으로 사용합니다. 그리고 그 변경은 절대 모호한 장소에서만 설명되거나 설명되지 않습니다. 또한이 다이어그램이 "상태간에 활동이 발생할 수있는 경로"를 표시하는 데 도움이되지는 않지만 onDestroy()가 여러 번 호출 될 수 있음을 나타내지 못하고 Resumed에서 Stopped 로의 전환을 우회하는 경우조차도 실패합니다. 그러나이 텍스트는 그 가능성을 분명히 설명합니다.

"Application Fundamentals"의 Application Lifecycle 섹션을 읽는 것만으로는 충분하지 않습니다. 대신, Activity에 대한 콜백 및 Process의 "Application Fundamentals"섹션에서 각각의 Javadoc을 읽어야합니다.

그런 다음 Log4D 문을 각 콜백에 넣고 logcat 출력을 조사하여 수명주기 동안 응용 프로그램을 순환시키는 것이 매우 유용합니다. 그러나 그때조차도 위에서 언급 한 온라인 문서 중 하나에서 정당성을 찾을 수 없다면 logcat에 표시된 순서대로 일어나는 생명주기 이벤트에 의존하지 마십시오.

관련 문제