
<ui 렌더링>
onMeasure() : 루트뷰와 차일드뷰의 사이즈가 결정되면 호출
onLayout():뷰와 차일드뷰와 사이즈와 포지션을 적용할 때 호출
onDraw():뷰가 화면에 콘텐츠(텍스트,이미지)를 그릴 준비가 되었을 때 호출
<Activity LifeCycle>
onCreate(): 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨
-> 다음 메소드:onStart()
onRestart(): 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨.
-> 다음 메소드:onStart()
onStart() : 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
->다음 메소드:onResume() 또는 onStop()
onPause() : 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에
적당한 메소드 -> 다음 메소드:onResume() 또는 onStop()
onStop() : 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨.
메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음.
->다음 메소드:onRestart() 또는 onDestroy()
onDestroy() : 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이
메모리 확보를 위해 액티비티를 제거할 때 호출됨.
->다음 메소드 없음
<Activity Stack>
태스크는 어플리케이션에서 실행 되는 액티비티를 기록하는 스택이다.
안드로이드에서는 태스크를 사용해서 화면의 순서와 흐름을 관리할 수 있다.

사용자가 현재 화면으로 보고 있는 액티비티가 가장 위쪽에 위치하며,
백(back)버튼을 누르면 보고 있던 액티비티는 스택에서 제거되고 그 아래에 있는 액티비티가 화면에
나타나게 된다.
스택의 가장 아래 기본 액티비티(base activity)가 있고, 주로 홈화면이 들어가게 된다.
프로세스 vs 태스크
프로세스와 태스크는 혼동하기 쉽다.
프로세스의 경우 다른 운영체제와 동일하게 어플리케이션의 독립적인 실행 단위(흐름)을 말한다.
태스크는 안드로이드에서 프로세스와 무관하게 실행되는 액티비티의 정보를 저장하고 있으며,
태스크를 통해 어플리케이션의 화면의 흐름을 관리할 수 있다.
따라서 프로세스는 해당 어플리케이션에 존재하는 모든 실행 코드와 객체들을 포함하지만,
태스크는 어플리케이션의 실행되는 액티비티만을 포함하며 다른 프로세스의 액티비티 또한
포함할 수 있다.
여기서 헷갈렸던 것이 다른 프로세스의 액티비티를 포함할 수 있다는 것이였는데,
아래 그림을 보면 이해하기 쉽다.

어플리케이션을 실행하게되면 프로세스와 태스크가 각각 실행된다.
어플리케이션 1이 실행되어 Process#1과 Tast를 생성했다고 하자.
어떤 기능을 통해 별도의 어플리케이션 2를 실행하게 되면,
어플리케이션 2의 프로세스가 실행되고 그 화면(Activity#2)에 대한 정보는 호출했던 어플리케이션1의
태스크에 저장된다.
즉, 액티비티의 인스턴스는 해당 앱 프로세스에의 메모리 영역에 생성되고, 호출하는 앱의 태스크에서 참조한다.
이렇게 기능을 실행해서 activity#2를 열거나 back 버튼을 눌러서 액티비티가 전환되면 현재 액티비티에 해당되는 프로세스로 전환된다.
그리고 액티비티의 참조가 끝나고 태스크에서 모두 제거될 경우 프로세스도 종료된다.
그림에서 어플리케이션 2의 액티비티인 Activity #2의 참조가 끝나고 태스크에서 모두 제거될 경우 Process #2도 종료된다.
<Activity Stack>
액티비티 스택은 AndroidManifest.xml 에서 설정이된다.
되도록이면 건들지 않는것이 좋다.
[Standard]
기본적으로 설정되어 있는 모드로 액티비티가 호출될 때마다 태스크에 저장하기 때문에 여러개가 중첩되어 저장될 수 있다.

[SingleTop]
가장 위(top)의 액티비티는 중복해서 쌓이지 않는다.
top영역에 three Activity를 다시 Call하면 기존 Activity를 재활용하여 호출 -> onNewIntent()호출

[SingleTask]
다중 인스턴스 생성 안됨
쌓여있던 스택은 남아있고 새로운 스택 공간이 하나 더 생성
새로 생긴 스택 공간은 다른 액티비티 스택에 쌓인다.(three 액티비티 스택 영역에 one,two 액티비티 스택이 쌓임)
유저가 보기엔 스탠다드와 똑같음

[SingleInstance]
쌓여있던 스택은 남아있고, 새로운 스택 공간이 하나 더 생김
one,two 스택이 쌓인 공간에서 three 액티비티를 call한다면 태스크 영역에 three영역이 존재.
한 태스크의 하나의 singleInstance 액티비티만 존재 가능

'TIL > android' 카테고리의 다른 글
| 안드로이드 커뮤니티 사이트 01 (0) | 2024.02.05 |
|---|---|
| kotlin 안드로이드 Activity (0) | 2024.02.02 |