2013-08-17 1 views
26

프로그래밍에 대해 Android에서 이야기하고 있습니다. 초기에 finish()와 System.exit (0)의 차이점

나는 finish() 는 현재 활동을 닫고 다시 활동 스택에서 이전에 가서 System.exit(0) 전체 응용 프로그램을 닫고, 생각했다.

하지만 잘못되었습니다. 나는 작은 실험을 만들었으며 두 가지 모두 현재 활동 인 만 끝낼 것이라고 생각했습니다. 내가 알 수


유일한 차이는 ActivityResult

  • 안드로이드 2.3.3에서 onActivityResult()finish()를 사용하여 다시 전달되어 있다는 점이다. 반면 System.exit(0)에 대해서는 onActivityResult()이 호출되지 않았습니다.

하지만 Android 4.2.2에서는 onActivityResult()가 둘 다 호출됩니다! exit()의 경우 Intent가 null입니다. finish()빠른 반면 exit()를 사용하는 경우

  • (I 만이이 장치에서 테스트) 시간 지연이 있습니다. (출구에서 더 많은 배경 작업처럼 보인다있다())

그래서,

  1. 둘 사이의 차이는 무엇

    ?

  2. 어떤 상황에서 exit()를 사용할 수 있습니까?

나는 두 가지 방법 중 하나가 더 이상 없다고 생각합니다. 누군가가 더 설명하고 나를 바로 잡을 수 있기를 바랍니다.

감사 요청에 따라

편집 :

2 개 활동과 안드로이드 응용 프로그램을 확인합니다. 인 텐트를 사용하여 실행기 활동에서 두 번째 활동을 호출하십시오. 이제 두 번째 활동에서 버튼을 클릭하면 System.exit(0);으로 전화하십시오. "VM는, 상기 프로그램의 실행 및 종료한다 멈춘다.를"???? I가 제 활성을 참조

(documentation에 따라). 왜?안드로이드 개발자에 따르면

+1

http://stackoverflow.com/questions/2033914/quitting-an-application-that-frowned-upon. 여기서 답을 확인하십시오 – Raghunandan

+0

@Raghunandan : 그건 좋은 것입니다. 모두들 좀 봐주세요. 그러나 방대한 양의 정보. 누구든지 내 주제에 맞게 간략하게 말할 수 있습니까? – Nizam

+4

'System.exit()'을 사용하지 마십시오. 나는 그것을 추천하지 않습니다. 'finish()'를 사용하십시오. 탐색을 위해 탐색 서랍을 사용할 수 있습니다. – Raghunandan

답변

9

실제로 활동이 하나만있는 경우에는 차이가 없습니다. 그런 다음 스택에 여러 활동을하는 경우에는 :

  • 마무리() -가에서 호출 활동을 완료하고 이전 작업을 참조하십시오.
  • 을 System.exit (0)는 - 스택에 하나 개 더 적은 활동이 응용 프로그램을 다시 시작합니다. 당신이 ActivityA에서 ActivityB을 불러 System.exit(0)이 ActivityB에서 호출되는 경우에 따라서, 다음 응용 프로그램이 살해되고 ActivityA
13

는 (당신은/내가 틀렸다는 것을 증명에 오신 것을 환영합니다 내가 옳았다) -

finish()

콜이 활동 완료 및 폐쇄해야 할 때. ActivityResult는 onActivityResult()를 통해 시작한 사람에게 전파됩니다.

System.exit(0)

VM는, 더 실행 및 종료됩니다 프로그램을 중지합니다.

+7

스택에 둘 이상의 활동이있는 경우 System.exit()이 앱을 종료하지 않습니다. 그것을 확인하십시오. – Nizam

+6

@Nizam : "스택에 둘 이상의 활동이있는 경우 System.exit()이 앱을 종료하지 않습니다."- 프로세스가 종료되지 않았다고 주장하는 증거를 제공하거나 앱을 업로드하여 프로세스가 종료되지 않았 음을 확인하기 위해 취한 단계와 함께이 동작. – CommonsWare

+6

@CommonsWare 나는 프로세스가 종료되지 않는다고 말하지 않았다. 그리고 나는 무슨 일이 일어나고 있는지 알지 못합니다. 추상화에서는 활동 내에서 finish() 또는 exit()를 사용하든 이전 활동이 표시됩니다. 그게 앱이 죽이지 않았 음을 의미합니다. – Nizam

9

문서에 따르면,이 프로그램은 종료됩니다.
하지만 설명서에 버그가있는 것 같습니다. Java 프로그램의 경우, 올바른 것입니다. 그러나 Android로 이동하면 이전 활동이 스택에서 표시됩니다. 안드로이드 코딩 자바 코딩을 사용하여 수행되기 때문에

는, 문서의 대부분은 자바의 경우와 동일합니다. 문서에서
,

을 System.exit (0)
VM는, 더 실행 및 종료됩니다 프로그램을 중지합니다.

Android 측면의 경우 'program'을 다른 것으로 바꾸어야합니다. 액티비티 또는 컨텍스트 일 ​​수 있습니다.

1

사 Qada의 대답은 내 테스트 후 정확한 하나 개의 활동을 즉시 시작했다.

마무리하면이 활동이 종료되고 이전 상태로 돌아갑니다.

있지만 출구는 하나 개의 활동이있는 경우 실제로 차이가없는 현재 활동을 너무 닫고 비우 모든 활동을 동결에 다시 이전 작업

을 시작합니다. 그런 다음 스택, 여러 활동이있는 경우 그러나 :

마무리() -가에서 호출 활동을 완료하면 이전 작업을 참조하십시오. System.exit (0) - 스택에 대한 활동이 적은 으로 앱을 다시 시작합니다.당신이 ActivityA에서 ActivityB라고한다면, 그리고 System.exit와 (0) ActivityB에서 호출되어, 다음 응용 프로그램이 살해되고 ActivityA

하나의 활동을 즉시 시작