마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

onCreate함수 호출 질문드립니다.

0 추천
Activity에 존재하는 onCreate함수는 함수뜻 그대로 생성될때 실행되는조건으로 알고있습니다.그런데 이 생성이라는것이 화면의 표시되면 생성인지 아니면 한번 생성된 상태에서 다른 액티비티를 화면전환하다가 다시 돌아왔을때 이미 한번 생성되었기때문에 onCreate가 실행이 안돼는지,일단 저는 간단한 Log를 통해서 봤을때 처음 생성되고 finish를 하지 않고서 화면전환을 통해 돌아와도 onCreate는 실행되는걸로 결과가 나오긴했습니다.그러면 onCreate는 그 Acitivity가 finish()여부의 상관없이 app에서 화면전환으로 다시 화면에 표시가 된다면 그건 생성으로 보면되는거죠??
2달째 코린이 (380 포인트) 님이 2021년 7월 24일 질문

1개의 답변

0 추천

님이 테스트하고 계신 걸 라이프 사이클이라고 합니다. 안드로이 시스템에서 가장 복잡하면서도 다루기 힘든 것 중의 하나입니다.

https://developer.android.com/reference/android/app/Activity

IOS에 비해 안드로이드 라이프사이클 디자인은 꽤나 복잡합니다. 여기에 Fragment는 라이프 사이클이 살짝 다르기 때문에 더 복잡해 집니다. 이걸 보완하려고 Lifecycle Aware Component 란걸 도입해서 ViewModel, LiveData, LifecycleObserver등등 최근의 안드로이드 개발은 상당히 복잡하고 까다롭습니다.

onCreated의 정의는 위의 문서에 나와있습니다.

Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity's previously frozen state, if there was one.

Always followed by onStart().

액티비티가 처음 생성될 때 호출되는 콜백메소드입니다. 이건 생성자하고는 다릅니다. 생성자는 안드로이드 시스템만 접근해서 사용하도록 되어 있습니다. 이 메소드는 아래처럼 생겼습니다.

protected void onCreate (Bundle savedInstanceState)

첫번째 인자를 주의 깊게 볼 필요가 있는데, 왜 이 파라미터가 필요할까요? 흔한 예로 디바이스를 로테이션시키면 Configuration. change라고 해서 액티비티가 재셩성되게 되어 있습니다. (기본값) 이렇게 함으로써 가로, 세로일 때 다른 화면의 레이아웃을 다르게 보여줄 수 있습니다. 그런데 디바이스가 회전이 되었다고 화면에 있던 정보가 사라지면 안되잖아요? 그래서 Bundle이란 걸 통해서 저장했다가 액티비티가 다시 생성이 될 때 꺼내어 쓸 수 있도록 saveInstanceState를 제공하는 겁니다. 

님이 질문하신 액티비티가 다른 화면에 갔다 왔을 때는 일반적으로는 다시 생성되지는 않지만, 상황에 따라 다시 생성되는 경우도 생깁니다. 예를 들면 Process Death 라는 종종 발생하는 증상이 생기면, 앱을 아예 죽였다 살리면서 화면에 보였던 액티비티를 다시 생성해 줍니다. (처리해야 하는 부분이지만, 이것까지 고려해서 처리하는 앱들이 실제로는 생각보다 많지 않습니다.)

따라서, 좀 더 구체적으로 onCreate는 액티비티의 생성 또는 재생성 시에 호출되는 콜백메소드입니다. 하지만 이 단계에서 화면에 뭐가 보이지는 않습니다. 위에 링크된 문서를 보시면 자세한 내용이 기술되어 있으니 천천히 살펴 보세요. 

가장 기본적인 라이프사이클에 대해서는 확실히 숙지하시고 상황에 따라  개발자 문서 등을 참고하셔서 대처하는게 좋습니다.

spark (227,470 포인트) 님이 2021년 7월 24일 답변
아하 답변감사합니다.궁금증이 해소되었습니다.
...