2010-04-07 6 views

답변

102

은 즉시 종료 또는 이 ?

finish()가 완료 될 때까지 실행됩니다라는 방법을 호출 한 기능을 완료한다. finish() 조작은 Android로 제어를 반환 할 때까지 시작되지 않습니다.

+2

그런 다음 완료하지 않고 StartAvtivityforResults()에서 호출하는 활동을 완료하는 방법은 무엇입니까? –

+0

@CommonsWare 어떻게하면 onStop이 항상 호출되도록 할 수 있습니까? 내 응용 프로그램에서 OnStop과 onDestroy는 어떤 경우에는 호출되지 않으며 그 경우 자식 작업이 완료 될 때 너무 많은 시간이 걸리고 App이 정지 한 것처럼 보입니다.onStop이 호출되면 모든 것이 정상적으로 작동합니다. 나는 안드로이드 2.3.6과 갤럭시 y에 오전 ... 내 질문을 참조하십시오 http://stackoverflow.com/questions/13928591/a-strange-behavior-of-android-activities-fragments-and-intent plz help !! ! – aProgrammer

+0

@CommonsWare 나는 매우 진실 된. + 1을 테스트했다.하지만 나는 한 가지 질문을하고 싶다. 내 함수에서 첫 번째 문으로 finish()를 작성한 다음 전체 함수를 실행하고 finish()를 호출하는 방법을이 관리 방법이라고 부른다. –

13

ondestroy()은 활동이 삭제되기 전에 수신되는 최종 통화입니다. 활동이 마무리되기 때문에이 중 발생할 수

(누군가가 그것을 finish()라고, 또는 시스템이 일시적으로 활동이 인스턴스를 파괴하기 때문에 공간을 절약 할 수 있습니다. 당신은 isFinishing() 방법이 두 가지 시나리오를 구별 할 수 있습니다.

1

두 개의 활동 A와 B가있는 경우 흐름이 A> B에서 진행됩니다. B = A는 finish()으로 전화합니다. 그런 다음

,

당신이 마크가 언급 한 바와 같이 실행할에서 finish()라는 방법. 그리고 콜백의 흐름은 다음과 같이 될 것입니다 -

  1. onPause()
  2. 그런 활동 B의>onStart()>onResume()
  3. onRestart()activity A의 실제 차이가 제공됩니다. finish()activity A으로 전화하지 않은 경우; onStop()Activity A 인 경우 여기에서 호출됩니다. 이 경우 우리가 finish()이라고 부른 곳은 Activity A입니다. 따라서 onStop()onDestroy()은 모두 activity A에 대해 호출됩니다.
13

항상 하나의 스레드에서 호출되어 onCreate, onResume, onPause .... onDestroy 액티비티의 같은 모든 라이프 사이클 이벤트 - "메인 스레드".

간단히 말해서이 스레드는 모든 활동 이벤트가 게시되는 대기열에 의해 백업됩니다. 이 스레드는 이러한 모든 이벤트를 삽입 순서대로 실행할 수 있습니다.

당신이 onCreate() 같은 라이프 사이클 콜백 중 하나 finish()를 호출하는 경우 ...는 "마무리"메시지가이 큐에 추가됩니다하지만 스레드는 &이 현재 실행 때까지 "마무리"조치 을 실행 선택하는 무료입니다 메서드는 즉 스레드가 현재 작업에서 해제 된 반환합니다.

+0

멋지게 설명 된 +1 – tpk

관련 문제