본문 바로가기
카테고리 없음

[ACP Study] Activity, Fragment

by 돌및쓰고 2021. 12. 15.

Activity

Activity는 Android 4대 컴포넌트(Activity, ContentProvider, Serveice, BroadCast Receiver)중 하나로 화면을 구성하는 요소입니다.

 

Activity의 생명주기

일반적으로 Activity의 생명주기라고 하면 위와 같은 그림이 많이나온다

onCreate

Activity가 생성될 때 호출 되는 생명주기로 

View를 Inflate해 화면에 보여주고 초기의 Listener세팅 같이 한번만 설정을 처리하는 단계이다

onCreate에는 두가지 상태가 존재합니다

  • 처음 Activity가 생성 되었을 때
  • Process Kill, ConfigChange

첫 번째 경우는 savedInstatanceState가 Null으로 처음 생성 되었기 때문에 아무런 값이 들어 있지 않다

두 번째 경우는 process kill 상태나 configchange로 Activity가 재생성 되는 경우이다 이경우 savedInstanceState가 Null이 아니기 때문에 Activity가 종료 될때 저장된 값을 다시 불러 올 수 있다.

onStart

Activity가 시작되거나 Background에서 Foreground로 돌아올 때 호출되는 상태, onStop가 페어로 멈췃던 동작을 다시 시작해야하는 부분으로 주로 애니메이션, 데이터 갱신을 시작한다.

 

onResume

Activity와 실제로 상호작용하는 상태 하나의 Acvitiy만 Resume상태 일 수 있다. 다른 Activity가 화면을 가리거나 포커스를 잃기 전까지 이상태를 유지 한다.

 

Using ------------------

 

onPause

Activity가 일부 가려지거나 포커스를 잃을때 호출 되는 생명주기로 포커스를 가지고 있을때만 사용하는 자원을 일시 정지 해야합니다. onPause는 매우 짧은 시간이기 때문에 네트워크나 데이터베이스를 사용하는 작업은 지양해야 합니다.

Dialog는 일반적으로 생명주기에 영향을 주지 않지만 퍼미션 Dialog같이 Activity로 만들어진 Dialog는 생명주기에 영향을 준다 

 

onStop

홈을 눌러 앱이 Background로 들어가거나, 다른 Activity가 위에 올라와 화면을 가릴 때 호출 되는 생명주기로 이 상태의 Activity는 종료의 대상이 된다.

onStart와 페어로 애니메이션, 데이터 갱신 중단, 데이터 저장등을 처리해야한다.

onDestroy

back버튼을 눌러 종료시킬 때나 오버뷰에서 앱을 제거할때 호출되는 단계 

메모리에서 사라지기 때문에 할당된 자원을 모두 반환 해야한다.

 

실제 Activity의 라이프 사이클

실제로 Activity의 생명주기를 확인해 보지않으면

다른 Actvitiy가 실행될때 아래의 순서로 호출 된다고 생각 할 수 있다.

onPause -> onStop-> 새로운 Activity [onCreate -> onStart-> onResume]

하지만 실제로는 

onPause -> 새로운 Acvitiy [onCreate -> onStart -> onResume] -> onStop

의 순서로 생명주기 콜백이 이루어진다

 

Activity에서 onPause가 호출 되더라도 화면에 일부는 볼 수 있다. Activity가 모두 가려져 보이지 않을 때에서야 onStop이 호출 된다는 의미다 

 

onStop이 호출되는건 Activity가 모두 가려져 보이지 않을 때이다. 그렇다는건 새로운 Activity가 생성되고 화면에 어떻게 그려지는지 알아 낸 후에야 onStop을 호출 할 수 있는것이다.

 

그다음 기존의 Activity로 돌아올 땐 아래의 순서로 호출 된다

새로운 Activity [onPause] -> onStart -> onResume -> 새로운 Activity [onStop -> onDestory]

 

Context

https://lotuslee.tistory.com/115

더보기

Context는 어플리케이션에서 특정 시점의 상태, ApplicationContext는 앱에서 전역적이거나 기본이 되는 Base Configuration을 나타내고, Activity의 Context는 Activity-specific Configuration을 나타낸다

Context가 단순한 인터페이스 뿐만 아니라 상태, 범위를 가진 다는 것은 Context가 식별자로도 사용된다는 의미다 Activity에서 View나 Intent를 생성할때 Context를 넘겨서 생성하는 것은 View나 Intent가 해당 Activity에 속하는 것을 말한다. 

따라서 Activity의 Context를 사용하거나 전달 할때는 Context가 사용되는 범위를 고려해서 사용 해야한다. 

 

스터디 원본

https://github.com/Android-Children-Playground/Study/tree/main/week1_fragment_activity

댓글