Activity Lifecycle

Park Jae Hong·2022년 12월 15일
0

onCreate

:액티비티가 launch 되고 최초로 호출되는 함수. 액티비티가 생성될 떄 한번만 호출해 주기 때문에, 보통 액티비티에서 사용하는 리소스들을 초기화 해줍니다.

onStart

: User에게 Activity가 보이도록 해준다. 이 단계는 매우 빠르게 끝나고 바로 onResume() 상태로 들어가게 된다. 보통 BroadcastReciver는 이 단계에서 정의해 주는 것이 좋다.

  • Activity가 보이지 않는 경우에도 BroadcastReciver를 사용해야 한다면 onCreate()에서 등록하고 onDestory()에서 반납해준다.

    ex) Activity 가 실행될 때, 결과 상태를 반영할 수 있도록 어떤 일이 발생했는지 기억해야 할 때,

  • Activity 초점이 없더라도(예: 다이얼 로그가 표시될 때) 수신자가 표시될 때 무언가를 수행해야 한다면 onStart()/onStop() 에서 등록/반납을 해준다.

  • Activity에 초점이 맞춰진 경우에만 수신자가 브로드캐스트에 대해 조치를 취해야 한다면 onResume()/onPuase()에서 등록/반납을 해준다.

  • 공식 문서에 onStart()/onStop() 등록/반납을 해주하는 이유

  1. 가장 많이 사용되기 때문 ?
  2. onStart()/onStop()에서 등록/반납을 할때나 onResume()/onPause()에서 등록/반납을 할때 기능적으로는 큰차이는 없지만 onPause() 너무 빠르게 지나가기 때문에 자원반납을 하는 것을 지양하기 때문?

onResume()/onPause()

  • onResume(): User와 직접 상호작용 하는 단계
  • onPause(): 전화가 오거나 다른 액티비티로 넘어가면 호출되는 단계
    (다시 현재 액티비티로 돌아오게 되면 onResume()을 호출한다.)

OnResume에서는, Camera리소스 같이 화면이 포커스를 가지고 있는 경우에만 사용할 리소스들을 초기화 해주고, OnPause에서, 해제해 주어야 합니다.
(BroadcastReceiver를 동적으로 생성했거나, SensorManager로 GPS를 사용하거나 하는 경우에는,
OnPause시에 리소스를 해제해 주면, 배터리소모를 막을 수 있기도 합니다.)

주의 사항
: 안드로이드 가이드에는 OnPause에서 데이터를 저장하거나, 네트워크를 호출하고, 데이터베이스를 실행과 같은 무거운 작업을 행할 만큼의 충분한 시간을 가지지 못하므로 하면 안된다

onStop()

: OnPause에서의 시간은 매우 짧다. 유저에게 다른 Activity가 보이고, 더이상 해당 Activity가 화면에서 보이지 않게되면, OnStop이 호출된다.
(참고로, 시스템은 OnStop()상태에 들어서면, onSaveInstanceState()이라는 메소드를 호출한다.
이 단계에서 key-value형태로 값을 저장할 수 있고, 이 값은 OnCreate()에서 복원할 수 있습니다.)

onDestory()

: OnStop()단계에서, 시스템이 메모리가 부족하여 시스템이 액티비티를 finish 하거나,
유저가 액티비티를 finish하는 경우, 혹은
프로그램적으로 activity를 finish()시키는 경우 OnDestroy가 호출됩니다.
(한가지 알아둬야 할 점은, 안드로이드에서 세로화면에서 가로화면으로 전환시키는 것은,
내부적으로는 현재의 Activity를 OnDestroy()를 호출하고, 다시 OnCreate()를 호출한다는 것)

onDestroy에서는 거의 작업하지 않는다. (자원 반납 등)
→ 작업을 오래 하지 않는 경우, 메모리가 부족한 경우 등 비정상적 종료가 되면 onStop 에서 프로세스가 종료되기 때문에 onDestory를 보장 하지 않는다

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글