Android Lifecycle

    Andorid System의 리소스 관리 전략

    출처: https://medium.com/androiddevelopers/who-lives-and-who-dies-process-priorities-on-android-cb151f39044f

    Android 시스템이 실행중일 때, 필요한 자원이 부족하게되면 실행중인 프로세스를 강제로 종료시킨다.

    프로세스 종료는 프로세스 상태(status)에 따르며, 위 그림에서 forground process의 중요도가 가장 높고 empty processes 의 중요도가 가장 낮은 우선 순위를 갖는다. Empty process는 새롭게 실행된 app을 처리하기 위해 대기중인 프로세스로, 메모리를 차지하고 있는 상태를 말한다.

     

    Activity Stack

    모든 Activity는 Activity Stack으로써 관리된다. Stack이란 이름에 맞게, 새로운 액티비티는 스택에 최상단에 추가되며 running activity가 된다. 스택의 최상단에서만 activity의 push, pop이 일어나기 때문에, 이전 activity가 foreground 가 되려면 그 후에 추가된 activity가 모두 exit되야 한다. 

    -> 유저가 back 버튼을 누르면, 이전 activity가 최상단으로 올라오며 foreground가 된다.

    너무 오랫동안 쌓여있는 activity는 시스템에 의해 가장 오래된 순으로 제거된다.

     

    Activity LifeCycle

    액티비티는 생명주기를 갖는다. 액티비티의 실행 흐름에 따라 active/running, pause, stop 그리고 end(종료)의 상태로 구분되는데, 위 그림에서 active/running을 제외한 오른쪽으로 갈수록 해당 액티비티가 종료될 간ㅇ성이 높다. 

    이미 destroy 된 end activity는 종료되었으니, stopped 상태에 있는 프로세스의 종료 순위가 최우선이다.

     

    각 메서드 중 onCreate()는 반드시 구현해야하는 callback 메서드로, 액티비티가 처음 생성될 때 가장 먼저 호출되는 메서드이다. 다른 언어로 생각하자면 main 함수 쯤 되기 때문에, onCreate() 메서드를 구현하지 않으면 프로그램이 실행되지 않는다. 

     

    위 그림에서 onPause()를 지난 paused, stopped 단계에 놓인 프로세스는 killable state, 자원 부족 시 시스템이 종료시킬 수 있는 상태에 놓인다. 그런 의미에서 onPause 메서드는 프로세스가 종료되기 전 한번을 반드시 호출되는 메서드로, 일반적으로 user edits와 같은 중요데이터를 저장하는 코드를 구현한다.

     

    서로 다른 두 종류의 callback 메서드

    Activity 상태에 따라 어떤 값을 저장하거나 복원해야 할까

    Persistent state : 작업한 데이터가 없어지지 않도록 저장. ex) 데이터베이스, content provider, file...등

    Dynamic state (동적 상태) : 사용자가 작업하던 내용을 저장. ex) 체크박스 체크 여부, EditText 작성 내용 등.

    위에서 언급했던 user edits와 같은 정보는 Dynamic state에 속함.

    댓글