Activity.finish ()는 Android에서 어떻게 작동합니까?


답변:


123

즉시 종료되거나 호출 된 기능을 완료합니까?

호출 한 메서드가 finish()완료 될 때까지 실행됩니다. finish()당신은 안드로이드에 제어를 리턴 할 때까지 작업도 시작되지 않습니다.


3
그렇다면 StartAvtivityforResults ()에 의해 호출되는 활동을 완료하지 않고 완료하는 방법은 무엇입니까?
Ayush Pateria

@CommonsWare onStop이 항상 호출되도록하려면 어떻게해야합니까? 내 앱에서 OnStop 및 onDestroy가 호출되지 않는 경우도 있으며 이러한 경우 하위 활동은 완료하는 데 너무 많은 시간이 걸리고 앱이 중단 된 것처럼 보입니다. 반면 onStop이 호출되면 모든 것이 정상적으로 작동합니다. 나는 Android 2.3.6과 함께 Galaxy y를 사용하고 있습니다 ... stackoverflow.com/questions/13928591/… plz help !!!
Amit

@ CommonsWare 나는 당신을 위해 선생님을 테스트했습니다. + 1하지만 내 함수의 첫 번째 문장으로 finish ()를 작성 한 다음 전체 함수를 실행하고 finish ()가 어떻게 관리되는지라고합니다.
Nikhil Agrawal 2013 년

@NikhilAgrawal, finish () 호출 직후 함수가 반환되도록 할 수 있습니다.
antonio081014

finish ()는 onDestroy ()를 호출하기 전에 onPause () 및 onStop ()도 호출합니까?
sr09 2014

20

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

요컨대이 스레드는 모든 활동 이벤트가 게시되는 큐에 의해 지원됩니다. 이 스레드는 삽입 순서대로 이러한 모든 이벤트를 실행할 수 있습니다.

다음 finish()과 같은 라이프 사이클 콜백 중 하나에서 호출하는 경우 onCreate()... "완료"메시지가이 대기열에 추가되지만 스레드는 현재 실행중인 메소드가 반환 할 때까지 "마침"작업을 자유롭게 선택하고 실행할 수 없습니다. 즉, 스레드가 현재 작업.


13

ondestroy() 활동이 파괴되기 전에받는 마지막 전화입니다.

이는 활동이 완료 finish() 중이거나 (누군가가이를 요청 했거나 시스템이 공간을 절약하기 위해이 활동 인스턴스를 일시적으로 파괴하고 있기 때문에 발생할 수 있습니다 isFinishing() . 메소드 를 사용하여이 두 시나리오를 구별 할 수 있습니다 .


1

두 개의 활동 A와 B가있는 경우 흐름은 A> B에서 진행됩니다. B = A는를 호출합니다 finish().

그때,

호출 finish()한 메서드 는 Mark가 언급 한대로 실행됩니다. 그리고 콜백의 흐름은 다음과 같습니다.

  1. onPause()activity A
  2. onRestart()> onStart()> onResume()활동 B의
  3. 그런 다음 진정한 차이가 있습니다. finish()에서 전화하지 않은 경우 activity A; 단지 onStop()Activity A여기 호출됩니다. 이 경우 우리가 전화 finish()한 곳 에서 Activity A; 그래서 onStop()하고 onDestroy()모두가 요구됩니다 activity A.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.