님이 테스트하고 계신 걸 라이프 사이클이라고 합니다. 안드로이 시스템에서 가장 복잡하면서도 다루기 힘든 것 중의 하나입니다.
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는 액티비티의 생성 또는 재생성 시에 호출되는 콜백메소드입니다. 하지만 이 단계에서 화면에 뭐가 보이지는 않습니다. 위에 링크된 문서를 보시면 자세한 내용이 기술되어 있으니 천천히 살펴 보세요.
가장 기본적인 라이프사이클에 대해서는 확실히 숙지하시고 상황에 따라 개발자 문서 등을 참고하셔서 대처하는게 좋습니다.