2012-07-25 4 views
0

나는 인 텐트를 통해 두 번째 활동을 호출하는 활동이 있습니다. 두 번째 Activity가 호출 된 후 첫 번째 Activity를 끝내고 싶습니다. 따라서, 나는 onStop() 방법에 다음 코드를 가지고 :finish()를 호출해야합니까?

@Override 
public void onStop() { 
    super.onStop(); 
    if (shouldBeClosed) { 
     finish(); 
    } 
} 

문제는 내 첫 번째 활동이 폐쇄되지 않는 것입니다. 왜 그런지 이해가 안되니?
아마이 코드를 onPause()에 넣어야합니까?
하지만이 경우 이해할 수있는 것처럼, 포커스가 느슨 할 때 (예 : 대화 상자 호출 후) 내 활동을 닫을 수 있습니다.
그래서 왜 이런 일이 발생하고 어떻게이 문제를 해결할 수 있을까요?

P. 변수 shouldBeClosed이 참입니다. 이것은 요점이 아닙니다.

편집 여기

두 번째 활동의 호출입니다 :

Intent intent = new Intent(this, AcSpContextAssign.class); 
Bundle extras = new Bundle(); 
extras.putInt(Constants.KEY_FROM_ACTIVITY, Constants.FROM_AcSpNameCreate); 
extras.putLong(Constants.KEY_SPID, spId); 
intent.putExtras(extras); 
startActivity(intent); 
+0

이 정상적인 청소를 수행 할 수 있도록 마무리 활동의 습관 나는 다음 활동을 만들면 더 이상 필요하지 않게되었습니다. 나는 onPause() 또는 onStop()을 사용하여이 문제를 해결할 수 있다고 생각합니다. 어떻게 닫혔는지 알 수 있습니까? 얼마나 오래 살아 있니? – Joel

+0

뒤로 버튼을 누르거나 단순히 두 번째 활동을 마치면 첫 번째 활동을 봅니다. – Yury

+0

에 동의했습니다. 어떻게 완료되지 않았는지 알고 계십니까? 'onCreate()'에 중단 점을 넣어서 확실히 알 수 있습니다. 'onStop()'코드가 실행 된 후에 다음 번에 활동을 호출 할 때'onCreate()'가 호출되어야합니다. –

답변

2

일반적으로, 당신은 당신이 의도를 전송 후 바로 첫 번째 활동 마무리()를 호출해야합니다. 뭔가 같이 :

... 
startActivity(secondActivityIntent); 
finish(); 

이 onPause()을 트리거 -> 이동 중지() - 첫 번째 활동>들의 OnDestroy() 체인을, 당신은 내가에 들어 왔

+0

감사합니다. 작동합니다. 그러나, 나는 몇몇 것을 이해하지 못합니다. 1. 왜이 onStop 메서드는이 활동에서 호출되지 않았습니까? 2. 이전 활동에서 새로운 활동 코드를 시작한 후 왜 계속 실행하는지 설명 할 수 있습니까? – Yury

+0

나는 그것이 그 자체의 스케줄에 따라 그 활동을 자유롭게 파괴 할 수 있기 때문에 그것이라고 믿는다. 전경을 잃는 즉시 활동을 파괴 할 것을 요구하는 것은 없습니다. 그러나 onPause() 메서드는 전경을 잃은 직후에 호출해야하며 잠시 후에 onStop을 호출해야합니다. – Joel

+0

@ Yury Joel이 옳습니다. 나는 가능한 한 빨리 활동을 파괴해야한다는 요구가 있기 전에 같은 문제를 겪고있었습니다. 그러나 Android OS는 전경이 없어지 자마자 onDestroy()가 호출되는 것을 보장하지 않습니다. 우선 모든 OS가 초기화되어 유휴 상태로 전환되는 두 번째 활동을 우선합니다. 그 후에야 첫 번째 활동이 onDestroy 이벤트를 수행합니다. –

관련 문제