2018년 10월 30일 화요일

[Android] LifeCycle의 중요성!

안드로이드 개발을 할때 잘 생각해야 되는 부분 중 하나가 LifeCycle이 아닌가 생각 합니다. 

예전에 Fragment 생명주기도 포스팅 했지만 기본에 충실 하자는 의미로 Android의 기본적인 LifeCycle에 대해 포스팅 하려고 합니다.

기본적인 Activity의 LifeCyle은 아래 그림과 같습니다.


출처:https://developer.android.com



Android 개발 시 LifeCycle을 정확히 이해하고 개발 해야만 App이 의도한 대로 동작 하게 됩니다.

onCreate() 에서 객체생성 및 초기화 작업을 해주며 onDestory() 에서 메모리 누수가 예상 되는 객체는 해제를 해줘야 됩니다.

몇가지 상황을 예를 들어 설명 하자면

1. onResume() 과 onPause()는 App이 실행 되는 순간에도 자주 왔다갔다 합니다. 

onPause()는 잠시 대기 상태라고 생각해도 좋으며 보통 다이어로그가 화면에 보여질때나, 상태창 같은 창을 볼때도 onPause()가 호출 되게 됩니다. 

2. 앱이 실행 됐다가 홈 버튼을 누른다던지, 다른앱이 실행 되면 onPause() -> onStop() 메서드가 호출 되며, 다시 실행 할때는 onRestart() -> onStart() -> onResume() 순서로 호출 됩니다.

3. App이 강제 종료된 상태로 onPause() -> onStop() -> onCreate() -> onStart() -> onResume() 순으로 호출 됩니다.
여기서 유심히 살펴봐야 될 부분이 onStop() 이후 onCreate()가 호출 된다는 것입니다. 
onDestory()는 생략되고 onRestart()가 아닌 Activity의 시작인 onCreate()부터 새로 시작되는걸 볼 수 있습니다.

이렇듯 여러 상황에 대비 하여 적절한 처리를 수행 해야 됩니다.



그럼 어떤 방식으로 적절하게 상태를 유지 시켜 줄 수 있는지 알아 보겠습니다.

객체의 해제는 onStop(), onDestory()에서 적절하게 해주면 되며, Data의 상태 저장인 경우는 onSaveInstanceState()와 onRestoreInstanceState() 를 살펴볼 필요가 있습니다.

onSaveInstanceState()는 onPause()와 onStop()사이에서 항상 호출 되며, onRestoreInstanceState()는 강제 종료시에만 호출 되는 메서드 입니다. 

이러한 메서드는 LifeCycle에는 포함되어 있지 않지만, App의 상태유지를 위해서 반드시 알고 있어야 하는 메서드 입니다. 

물론 요세는 Android Architecture Component 개념을 활용 하여 화면 회전에 대한 처리를 해결할 수 있지만 위와 같은 기본적인 개념을 완전히 이해한 후 유용한 Architecture를 도입 한다면 좀 더 안정적인 App을 만들수 있을꺼라 생각 합니다. 












댓글 없음:

댓글 쓰기