2011년 11월 3일 목요일

onResume()/onPause() 와 onStart()/onStop() 차이점

!) 아래 내용은 ICS (4.0.x) 이상 버전과는 맞지 않습니다.

  • ICS 버전의 폰들 중에는 power button 을 눌렀을 때 onPause() onStop() onStart() onResume() 이 반복적으로 불리는 경우도 있었습니다.
  • JellyBean 버전의 경우 power button 을 눌르면 onPause() onStop() 이 불리고 다시 power button 을 눌러 lock screen 에는 아무 이벤트 함수 불리지 않고 lock screen 을 해제해야 onStart() onResume() 이 불리는 점 확인하였습니다.


1. onResume()/onPause()
onPause() 함수는 Activity 위에 다른 Activity 가 올라오거나 하여 focus 를 잃었을 때 불린다.
onResume() 함수는 focus 를 다시 얻었을 때 불린다.
예를 들어 폰의 alarm 이 울리거나 전화가 오는 경우 onPause() 함수가 불린다.

2. onStart()/onStop()
onStop() 함수는 Activity 가 완전히 화면을 벗어날 때 불린다. 예를 들어 홈키를 눌러 홈화면으로 이동하거나 전화가 와서 화면을 완전히 덮는 경우 불린다.
onStart() 함수는 Activity 다시 화면이 다시 돌아 올 때 불린다.

3. 선택 방법
만약 자신의 Activity 위에 다른 Activity 가 올라왔는데 화면을 전부 채우지 않았을 때 작업을 계속 하고 싶다면 onStart()/onStop() 함수에 작업 시작/종료 를 구현하면 되겠고 Activity 가 focus 를 잃으면 무조건 작업을 종료해야 하는 경우 onResume()/onPause() 함수에 작업 시작/종료를 구현하면 되겠다.

4. 실험
onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 함수가 불리면 화
면에 표시하게 하였다.

알람이 뜬 경우, onPause() 는 불리지만 onStop() 은 불리지 않는다.


다른 앱이 화면을 덮는 경우, onStop()/onStart() 이 불린다.

주의) 앱 실행 중 파워키를 눌러 화면이 꺼진 경우 onPause() 함수는 불리지만 onStop() 함수는 불리지 않는다.

HTC Raider 폰의 Youtube 앱의 경우 비디오를 보는 중 파워키를 눌러 화면이 꺼져도 재생은 계속된다. onStop() 함수가 불릴때 비디오를 정지하게 하였기 때문이다.

댓글 없음:

댓글 쓰기