2011-02-07 3 views
41

나는 finish()으로 전화를 걸지만 내 활동은 계속 진행됩니다.Android 활동에서 finish()를 호출하는 것이 실제로 완료되지 않습니다.

주 활동 화면의 메뉴에 의해 호출되는 활동이 있습니다. 목록이가 토스트를두고 비어있는 경우

// Make sure there are some events in the list. 
    if (theEventArrayList.isEmpty()){ 
     Toast.makeText(this, "Event List is empty", Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
    SummarizeCurrentEvent(); 
    graphEvents(); 

, 나는 finish()에 대한 호출에 중단 점을 설정할 수 있습니다 내 활동의 onCreate() 방법은 다음 코드 조각이있다. 디버거에서 단계를 밟으면 바로 SummarizeCurrentEvent()이됩니다. 나는 finish()이 활동을 종료 할 것이라고 생각했습니다. 그렇지 않은가요? 이 방법에 대한 자세한 정보는 어디에서 찾을 수 있습니까?

답변

65

finish이라는 메서드가 완전히 실행되지 않으므로 finish 뒤에 return 문을 넣어야합니다. 그냥, 예를 마무리 할 필요가 무엇을 할 수있는 활동을 말한다) about finish() in android

+1

'SummarizeCurrentEvent(); graphEvents(); ...'else {}'블록에서? –

+0

@ ban-geoengineering 잠재적으로 여러 개의 "if (...) {finish(); 반환; }''. 나는 다음과 같은 코드가있을 때 명시 적으로''finish()''와''return''을하는 것이 좋은 습관이라고 생각한다. –

0

완료되면 작업이 완료되지만 UI 상호 작용을 수행하는 것은 기본 루프까지입니다. onCreate에서 돌아온 UI 루프가 실행될 때까지 기다려야합니다.

5

마무리 (: 또한

,이 질문을 참조하십시오. 종료, onPause 호출, 부모에게 결과보고 등 exit() 호출이나 아무것도하지 않습니다.

finish() 호출 후에 반환해야합니다. 다른 답변에 추가

3

, 당신은 여전히 ​​수도(Re)onStart, onResume 및 호출 onPause 있습니다.

다음 링크에서 하나의 활동이 종료 될 때 먼저 Stop 및 onDestroy에서 onPause (그리고 아마도 보장 할 수는 없지만) 호출된다는 테이블이 있습니다.

참조 Activity

0

이것은 try...catch 문을 사용해야하는 경우입니다.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     //...some initialization... 

     // Make sure there are some events in the list. 
     if (theEventArrayList.isEmpty()){ 
      throw new Exception("Event List is empty"); 
     } 
     SummarizeCurrentEvent(); 
     graphEvents(); 
    } catch (Exception e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     finish(); 
    } 
} 
관련 문제