2011-12-30 1 views
3

finish()을 호출 한 직후에 활동을 종료하지 않는 것이 좋을 때 특별한 상황이 있습니까? finish()가 즉시 처리를 종료하지 않는 이유는 무엇입니까?

는 (다른 방법으로는, 왜이 방법은 디자인에서 즉시 작업을 종료하지?) 적절한시기에 나는 즉시 말할 때

가, 내 말은

http://developer.android.com/reference/android/app/Activity.html#finish()

UPDATE, 당신 finish()을 호출하고 물론 인스턴스 번들을 저장하여 정리할 수도 있습니다. onStop 및 onDestroy 메소드는 포함되지 않습니다.

여기에 조각이, 내가 무슨 말을하고 어떤 예를 보려면

onCreate(Bundle savedInstance){ 
    // code executed 
    if(somecondition){ 
     finish(); 
    } 
    // code which shouldn't be executed 
} 

문제이다, 코드는 조건이 활동을 종료하기 전에뿐만 아니라 완성, 그리고 왜 finish() 호출이 중지되지 후 이유 즉시 처리

+1

즉시 무엇을 의미합니까? – Flo

+1

물론 의도적으로 설계된 'Activity'는 Activity # finish()를 호출하고 활동을 일시 중지, 중지 및 파괴 할 때의 라이프 사이클을 따른다. 그리고 ** 스스로 정리를하지 않으면 여전히 정크 할 수있다. 실행중인 다른 스레드 또는 UI 스레드에 다시 게시 할 수 있습니다. – Jens

+0

@Flo이 메서드를 호출 한 직후에 현재 처리 블록의 나머지 코드는 건너 뜁니다. –

답변

4

당신은 실행하기 위해 아래의 코드를 방지하기 위해 반환을하지 말아야 :

if(somecondition){ 
    finish(); 
    return; 
} 
+0

좋은 제안, 나는 이미 그런 일을합니다. 문제는'왜 우리는''어떻게해야 할 것인가''기능 코드의 나머지를 실행하는 것을 피할 수있는 방법 '에 관한 것이었다. 하지만 고마워. –

+0

자바의 본질이다. 리턴, 메소드 블록의 종료 또는 예외 발생으로 만 실행을 중지 할 수 있습니다. 반환하지 않으려면 else 블록을 추가하면됩니다. if (somecondition) { finish(); } else { } – evanwong

0

확인해야 할 사항 : 완료되지 않은 비동기 작업이 실행 중입니까?

+0

아니요, 이미 실행중인 'finish()'호출 시간에 비동기 작업이 있습니다 –

0

finish()는 활동을 숨기고 즉시 살해하지는 않습니다. 그리고 os가 다른 앱이나 프로세스를 실행하기 위해 메모리가 필요할 때 나중에 죽일 수 있습니다.

+0

여기에 설명하는 것은 활동을 일시 중지하는 동작입니다. –

1

모든 이벤트를 처리하는 루프가있는 thread_0가 있다고 상상해보십시오.

호출 완료는 새 이벤트를 추가하지만 thread_0이 이벤트를 처리 할 때까지 활동이 종료되지 않습니다.

+0

자, 그럼'finish()'를 호출하면 활동을'ready-to-be-kill/finished' 플래그로 표시하고 종료 코드를 즉시 트리거하지 않는 방법이라고 할 수 있습니다. –

0

Android에서는 finish() 후에도 일부 데이터를 저장할 수 있습니다. 나는 취소하는 것이 또한 스레드를 해칠 수 있다고 생각합니다. 귀하의 경우에는 수익을 사용할 수 있습니다. 코드 실행을 중지합니다.