안드로이드 면접 질문 #3 액티비티
https://github.com/MindorksOpenSource/android-interview-questions#core-android 해당 사이트를 바탕으로 작성하였습니다.
액티비티는 일종의 어플리케이션 구성요소 로서, 사용자와 상호작용 할 수 있는 화면을 제공한다. 액티비티 마다 layout.xml 파일을 구현 함으로써 사용자에게 인터페이스를 제공 해 줄 수 있다.
액티비티를 사용하기 위해서는 아래와 같은 내용들을 알아야 한다.
setContentView()를 이용하여 액티비티의 View를 Draw
AndroidManifest 파일에 Activity를 등록
라이프 사이클 콜백 처리
onCreate, onStart, onResume, onPause, onDestroy
액티비티 시작시에 정보를 전달하거나 액티비티가 종료될 때 결과를 리턴할 수 있다.
액티비티의 3가지 상태?
활성화 (Active) 또는 실행 중 (Running) 상태
Activity가 전면에 나와서 실행되고 있을 때
현재 Task에 대한 Activity Stack의 최상위에 존재하고 있을 때
이 상태의 Activity는 사용자와 상호작용 할 수 있다.
멈춤(pauese) 상태
사용자의 포커스를 가지고 있지 않지만 여전히 화면지 보여지고 있을 때
다른 액티비티가 위에 위치 하지만 그 액티비티가 투명상태 혹은 전체화면을 채우지 못해 아직은 이전 액티비티가 보이는 상태 이 때 이전 액티비티의 상태는 멈춤 상태이다.
극도로 메모리가 부족한 상태에서는 시스템에 의해 강제로 종료될 수 있다.
정지(Stopped) 상태
다른 Activity에 의해서 완전히 가려져, 더 이상 사용자에게 보여지지 않을 때
액티비티 라이프 사이클?
onCreate()
액티비티가 최초 생성될 때 한번만 호출
액티비티의 대부분 초기설정을 이곳에서 수행
액티비티가 재성생되는 경우 이전상태값을 저장한 번들 객체가 전달
Bundle savedInstanceState
onStart()
액티비티가 사용자에게 보이기 직전 호출
onResume()
액티비티가 사용자와 상호작용을 하기 직전 호출
onPause
다른 액티비티의 호출로 해당 액티비티가 백그라운드로 진입할때 호출
CPU를 소모하는 작업들을 중단 시킬 때 이곳에서 수행하면 적절
이 메소드가 리턴 되기전까지는 다음 액티비티의 실행이 이루어지지 않음 > 되도록 빨리 끝내야함
onStop
액티비티가 더 이상 화면에 나오지 않음
onDestroy
액티비티가 소멸되기 전에 호출
개발자가 finish()메소드를 호출 했을 때 혹은 시스템이 메모리를 확보하기 위해 액티비티를 일시적으로 종료 할 때 호출.
위의 두가지 시나리오는 isFinishing()메소드를 통해 구분가능
onRestart
액티비티가 중단 되었다가 다시 시작되기 직전에 호출
이 뒤에는 항상 onStart()가 호출
액티비티 재시작 경우
onPause() 상태까지 호출 뒤 재시작 된 경우
onPause() > onResume()
onStop() 상태까지 호출 뒤 재시작 된 경우
onStop() > onRestart() > onStart() > onResume()
참고
launch modes?
launch mode의 종류는 총 4가지가 있다.
standard(default)
인텐트를 할 때마다 Activity를 새로 생성한다.
singleTop
인텐트를 할때마다 Activity를 새로 생성하나, 동일한 Activity가 해당 태스크의 top에 있을 경우 새로 생성하지 않고 기존에 있던 Activity를 호출 한다.
생명 주기는 onPause() > onNewIntent() > onResume
singleTask
하나의 Activity만 생성이 되나, 다른 Activity가 해당 태스크의 일부가 되는 것을 허용한다.
singleInstance
이 옵션도 singleTask와 비슷하나 그 어떤 Activity와도 섞이지 않고 유일한 Activity로 동작