ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android Life Cycle of Activity(안드로이드 액티비티 생명주기)
    Android/Concept 2019. 7. 30. 16:59

     저번에 안드로이드의 시스템적 구조에 대해서 공부했으니, 이번에는 실제 안드로이드 코딩 때 많이 쓰는 항목인 생명주기에 대해 공부 해 봅시다.

     

    이 그림이 제일 보기 편하게 생김

     위 그림이 안드로이드 Activity의 생명주기입니다. 생각보다 단계가 별로 없고 이름들이 직관적입니다! 일단 하나하나씩 어떤 놈들인지 살펴보죠.

     

    OnCreate()

     먼저 create, 창조하다? 입니다. 말 그대로 액티비티가 처음 시작 시 제일 먼저 발동되는 함수입니다. 완~~전 맨 처음에 부릅니다. 그래서 왠만한 경우 이놈을 다시 호출하지는 않아요.

     

    (예외로, 화면 회전 할 경우 액티비티를 새롭게 만들기 때문에 onCreate()이 다시 호출 됩니다!)

     

     저희가 안드로이드 코딩을 하다보면, 이 함수에 여러 사항들을 적고 시작하죠. 그 이유가 최초로 실행 시 여러 설정들을 해주고 그것들을 뒤에 써야하기 때문입니다.

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            }

     요놈 많이 보셨을겁니다. 몇 가지 설명을 해드리자면

     

    setContentView()

     xml 파일인 레이아웃을 inflate(부풀리다) 하는 함수입니다. 즉, xml 쪼가리를 직접 View 형태로 보일 수 있게 배치하는 놈이죠.

    savedInstanceState

     요놈은 Bundle 이라는 클래스인데, 앱이 꺼지든 말든 항상 유지되는? 자료형입니다. 정확히 말해서는 구조체 식으로 이루어져 있다고 하는군요. 파이썬 dict() 같은 Hash 형태로 돼 있습니다.

     

     어쨋든 이게 '왜 onCreate() 인자로 받아오냐?' 라는 의문이 드는데, 위에 말 했듯이 앱이 꺼져도 자료가 안날라갑니다. 즉, 앱을 끄기 전에 다음에 쓰기 위한 데이터가 있다면 저 savedInstanceState에다가 저장하면 된다는 겁니다. 그리고 다음에 onCreate()으로 앱이 실행 될 때, 거기서 값을 꺼내오고 맘대로 하면 되는거죠!

     

    (정확히는 onSaveInstanceState() 이라는 함수로 저장을 합니다!)

     

     

     

    OnStart()

     음... onCreate()과 onResume() 사이에 있는 놈이라 이해하시면 편합니다.. 위에 onCreate()이 최초 한 번만 실행하는 놈이기 때문에, 만약 onRestart()와 같이 액티비티가 뭔가 재 실행 되는 경우, onCreate()을 불러오긴 좀 그러니 만들어 놓은 느낌입니다.

    (아직 화면에 View들이 보이지는 않은 상태입니다!)

    (로그인 기능 구현에서 로그인 했는지, 안 했는지 구분하는 경우가 대표적인 예라는군요)

     

     여튼 onStop() 상태에서 다시 액티비티가 실행 될 때(onRestart()) 요놈이 실행되는데, 어쩔 때 그러는지 자세한 사항은 뒤에서 설명하죠!

     

     

     

    OnResume()

     요놈은 액티비티의 View들이 사용자 화면에 보이는 시점입니다. 즉, 실제로 사용자와 상호작용 할 때 바로 직전? 느낌입니다. 이놈도 onPause()랑 짝 맞추려고 만든 느낌이긴 한데... 여튼 그만큼 자주 호출이 되는 함수입니다.

     

     아, 참고로 onCreate() 부터 onResume()까지 실행 되듯이, onRestart()로 onStart()가 호출 되었을 때 onResume()도 순서에 따라 실행되게 됩니다!

     

     

     

    OnPause()

     여기부터 이제 이해가 좀 되실겁니다. onStart() onResume() 이 두 놈은 뭔가 이해하기가 난해하죠? 각각 onStop() onPause() 로 대응해서 이해하시면 더 잘 될겁니다!

     

     이놈은 액티비티에 포커스를 잃었을 때 호출 됩니다. 예를 들자면 다이얼로그나 팝업 창과 같이 작은 창들이 떴을 때, 그 뒤에 있는 화면은 포커스를 잃죠? 그런 경우입니다! 액티비티가 다 가려지진 않고 초점만 잃은 상태!

     

     그래서 그런 팝업 창이 닫히고, 전에 액티비티가 다시 돌아 왔을 때 onResume()이 호출 되는겁니다!

     

     

     

    OnStop()

     얘는 액티비티가 완전히 화면에서 가려졌을 때 호출 됩니다. 즉, 다른 액티비티를 호출하거나 아니면 홈키 눌러서 앱 나갔을 때가 예시겠죠.

     

     그럼 다시 돌아오면? onRestart()가 발동해서 onStart()가 발동됩니다. 참고로 찾아보니, onRestart()가 호출 된다고 해서 onStart()가 호출 안되거나 하지는 않는군요. 무조건 호출 한답니다.

     

     근데 이런 의문이 드는군요. 그럴거면 onStart()에 다 때려 박으면 되지, 왜 onRestart()가 있나? 네. 찾아보니까 잘 안쓴다고 하는군요.

     

     하지만 필요한 경우는 분명 있습니다. 저희가 onStart()에 A라는 기능을 넣어 놓았는데, 앱이 Stop 됐다가 다시 켜졌을 때 그 A라는 기능을 다시 부르면 안 되는 겁니다. 그래서 onRestart()에 따로 B라는 기능을 넣어 놓는거죠!!

     

     

    OnRestart()

     위에 설명을 해 놓았기 때문에 패스...

     

     

    OnDestroy()

     완전히 앱이 Cut 당했을 때 입니다. 앱을 아예 관리자에서 껐거나, finish() 함수를 호출 해서 끄거나...

     

     

     

     

     이것들을 잘 이해해야 기능구현 하실 때 어느 생명주기 딴에서 실행 할 지 잘 선택 할 수 있게 됩니다!

    댓글

Designed by Tistory.