Activity
액티비티
액티비티는 구성요소로써 상호작용할 수 있는 화면을 제공한다. 보통 하나의 어플리케이션은 여러개의 액티비티가 서로 묶여 있는 형태로 구성된다. 통상 하나의 액티비티가 메인 액티비티가 되며, 시작할때 사용자에게 보여주게 된다. 새로운 액티비티가 시작될때 이전 액티비티는 중단되지만 시스템은 해당 액티비티를 스택("백 스택")에 보존한다.
새로운 액티비티가 시작되면 백스택에 푸쉬된다. 백스택은 기본적인 "후입선출" 방식이다.
사용자 인터페이스 구현
액티비티에 대한 사용자 인터페이스는 뷰 계층 이다. 레이아웃 모델은 ViewGroup 에서 파생된 뷰이다. 또한 View, ViewGroup 클래스의 아래로 내려가서 레이아웃을 생성하고 이를 액티비티 레이아웃에 적용할수있다.
뷰를 사용하여 레이아웃을 정의하는 가장 보편적인 방식은 어플리케이션 리소스에 저장된 XML 레이아웃 파일을 사용하는 것이다. 이렇게 하면 액티비티의 동작을 정의하는 소스 코드와 별개로 사용자 인터페이스 디자인을 유지할수 있다.
액티비티 생명주기
액티비티는 기본적으로 생명주기라는 라이프 사이클이 있다. 이 라이프 사이클은 다른 액티비티와의 관계, 액티비티 작업과 백스택 등에 직접적으로 영향을 받는다.
액티비티의 세가지 상태
- 재개됨(Resumed) : 액티비티가 화면에 포그라운드에 있고 사용자 포커스를 갖고 있습니다.(현재 실행중이라고도 한다.)
- 일시정지됨(Paused) : 다른 액티비티가 이 액티비티 위에 포그라운드로 있으며 해당 액티비티 부분적으로 투명하거나 전체 화면을 덮지 않는 상태.(일시정지된 액티비티는 완전히 살아있지만, 메모리가 극심 하게 부족한 경우 시스템이 중단시킬수 있다.*객체가 메모리에 보관되어있고 모든 상태 및 멤버 정보를 유지하며 창 관리자에 붙어있는 상태로 유지됨*)
- 정지됨(Stopped) : 이 액티비티가 다른 액티비티에 완전히 가려진 상태.(액티비티가 백그라운드에 위치함.*객체가 메모리에 보관되어 있고. *모든 상태와 멤버 정보를 유지하지만 창 관리자에 붙어 있지 않음.) 더이상 사용자에게 표시되지 않으며 다른곳에 메모리가 필요하면 시스템이 종료시킬수 있습니다.
액티비티가 일시정지 또는 중단된 상태이면 시스템이 메모리에서 삭제할 수 있습니다. 이러기 위해서는 종료를 요청하거나 단순히 이 액티비티의 프로세스를 중단시키면 된다. 액티비티가 다시 열릴때는 처음부터 다시 생성해야 한다.
액티비티의 전체 수명은 onCreate() 호출과 onDestroy()호출 사이를 말합니다. 액티비티는 onCreate() 에서 전체 상태의 설정을 수행할 다음 나머지 리소스를 모두 onDestroy()에 해제해 주어야 합니다.
액티비티의 가시적 수명은 onStart() 호출과 onStop() 호출사이를 말한다. 이기간중에는 사용자가 액티비티 화면을 보고 상호작용할수 있다. 즉, 여러번 호출 할수 있으며 이때 액티비티는 사용자에게 표시 되었다 숨겨졌다 하는 상태가 됩니다.
액티비티 전경 수명은 onResume() 호출과 onPause() 호출 사이를 말합니다. 이 기간중에는 이 액티비티가 화면에서 다른 모든 액티비티 앞에 표시되며 사용자 입력도 여기에 집중됩니다. 액티비티는 포그라운드에 나왔다 안나왔다 자주 할수 있습니다. 이 두가지 메서드의 코드는 상당히 가벼워야 합니다. 그래야 전환이 느려 사용자를 기다리게 하는일을 피할수 있습니다.
액티비티 수명 주기 콜백 메서드 요약
- onCreate() : 액티비티가 처음 생성되었을때 호출. 이곳에서 일반적인 정적 설정을 모두 수행해야 함. 이 뒤에는 항상 onStart()가 따라옴.
- onRestart() : 액티비티가 중단되었다가 다시 시작되기 직전에 호출됨.
- onStart() : 액티비티가 사용자에게 표시되기 직전에 호출됨. 액티비티가 전경으로 나오면 onResume()이 뒤따라오고, 액티비티가 숨겨지면 onStop()이 뒤에 따라옴.
- onResume() : 액티비티가 시직되고 사용자와 상호 작용하기 직전에 호출. 이 시점에 액티비티는 스택의 맨 위에 있음. 이 뒤에는 항상 onPause()가 뒤따라옴.
- onPause() : 시스템이 다른 액티비티를 재개하기 직전에 호출됨. 이 메서드는 일반적으로 데이터를 유지하기 위해 저장되지 않는 변경 사항을 커밋하는 데, 혹은 기타 작업을 중단하는 등 여러가지 용도로 사용. 이 메서드는 항상 가벼워야함. 이 메서드는 반환될때까지 다음 액티비티가 재개되지 않음. 액티비티가 전경으로 돌아오면 onResume 이 뒤에 오고 사용자에게 보이지 않게 되면, onStop이 뒤에옴.
- onStop(): 액티비티가 더 이상 사용자에게 표시 되지 않게 되면 호출 됨. 액티비티가 다시 사용자와 상호작용하면 onRestart 가 뒤에 오고 사라지면 onDestroy 가 뒤에 따라옴.
- onDestroy(): 액티비티가 소멸되기 전에 호출, 이것이 액티비티가 받는 마지막 호출. 이와 같은 두가지 시나리오는 isFinishing 메서드로 구분(finish를 호출했냐 혹은 메모리공간을 절약하기 위해 소멸시키냐 )
액티비티 상태저장
구성 변경 처리
액티비티 조정
https://developer.android.com/guide/components/activities.html#Creating