android lifecycle

이창민·2022년 1월 10일
0

activity LifeCycle

생성부터 소멸단계까지 activity의 상태가 변경되는 것을 callback method로 알려줌
이를 activity lifecycle이라 한다.
6가지 콜백으로 구성된 핵심 집합의 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()를 제공

onCreate는 액티비티가 최초 생성될 때 실행됨. 최초 한번만 실행될 작업들을 하면 적절
ex. layout 인포메이트, 데이터 초기화

onStart 액티비티가 화면을 벗어난 이후 다시 되돌아 왔을 때 한번 더 호출될 수 있으므로 애니메이터 실행, 데이터 갱신같은 작업 처리

onResume 액티비티가 화면에서 보여지고 있음을 의미(focus를 얻음)

onPause focus를 잃을 때 호출되는 콜백
onResume과 onPause는 자주 호출될 수 있기 때문에 너무 오래걸리는 연산을 처리하면 안됨

onStop onStart와 대응해 생각하면 좋음
앱의 애니메이션을 종료하거나 데이터 갱신처리 중단 가능

onDestroy 사용중인 앱 목록에서 완전히 제거될 때 호출되는 콜백
이전단계인 onStop에서 마저 정리하지 않은 작업이 있다면 리소스 해제 처리

실행

Activity가 실행되면 순차적으로 onCreate , onStart, onResume이 빠르게 실행된다.
onResume이 실행되면 사용자에게 화면이 보여진다.

정지

사용자가 back이나 home 버튼을 클릭하거나 해서 해당 화면에서 벗어나면
onPause와 onStop이 실행된다.

실행중인 앱 목록에서 완전히 제거될 때 onDestroy가 실행됨

재실행

사용자가 back이나 home 버튼을 클릭해 화면을 종료했지만,
사용중인 앱 목록에 남아있는 경우 다시 그 앱으로 돌아가면 onStop 상태에서 onRestart가 호출됨 다시 onStart, onResume을 호출함.

app process killed

onStop 콜백이 호출된 이후 이 앱이 메모리에서 제거해야할 대상으로 선정될 때 발생하는 단계

Fragment LifeCycle

Created

onCreate - 레이아웃 인플레이트하면 안됨(프래그먼트에서)
프래그먼트는 액티비티에서 인플레이트하는 뷰이므로 최소한 액티비티의 레이아웃이 인플레이트된 이후에 진행되야함 -> onCreateView에서 해야함

onCreateView

onViewCreated -

        val button = view.findViewById<Button>(R.id.btn_enter_product_detail)
        button.setOnClickListener {
            val transaction = parentFragmentManager.beginTransaction()
            transaction.add(R.id.container_main, ProductDetailFragment())
            transaction.commit()
        }

위 코드 같은 것들 할당하면 됨

onViewStateRestored - 화면이 소멸되었다 다시 재생성 되는 경우 이전에 저장한 데이터를 기반으로 뷰를 복원할 때 활용되는 콜백함수

STARTED, RESUMED, STARTED, CREATED

onStart, onResume, onPause, onStop콜백들은 액티비티에도 있다.
이 콜백들이 호출되는 시점은 액티비티와 마찬가지이다.

onSaveInstanceState - 화면이 소멸되기 전 화면 복원시 필요한 데이터 저장하는 단계
여기서 저장하는 데이터가 Created단계의 onViewStateRestored에 전달되고 이때 해당 데이터를 기반으로 복원

onDestroyView - onCreateView와 대응해 생각하면 됨
화면이 소멸되기 전 리소스를 해제하지 못한 것이 있으면 처리하면 됨

DESTROYED

onDestroy - 화면이 소멸되기 전 activity와 마찬가지로 호출됨

참고자료

https://developer.android.com/guide/components/activities/activity-lifecycle
https://developer.android.com/guide/fragments/lifecycle

profile
android 를 공부해보아요

0개의 댓글