Activity
Activity
- 애플리케이션의 기능을 갖는 단일의 독립 실행 형 모듈(리눅스의 프로세스)
- 모듈: 독립적으로 실행 가능한 객체
안드로이드에서는 Activity 와 Application이 모듈.
리눅스에서는 이처럼 독립적으로 실행 가능한 모듈을 프로세스 라고 함
안드로이드에서는 액티비티가 화면 구성의 단위
뷰는 화면에 출력은 되지만 모듈은 아니기 때문에 독립적으로 존재 불가
안드로이드에서는 화면에 출력되는 애플리케이션은 반드시 한 개 이상의 액티비티를 소유해야 함
액티비티는 반드시 액티비티 클래스로부터 상속받는 클래스로 생성
실제 화면 구성요소는 없기 때문에 화면에 무엇인가를 출력하고자 할 때는 setContentView메소드를 호출해야 함
매개변수로는 View 객체 또는 layout의 id를 전달하면 됨
setContentView 메소드는 디바이스 가로와 세로 크기를 인지하고 있다면 view의 크기를 그 크기에 맞춰 출력함.
전체 화면 위에 새로운 view를 추가하고자 하는 경우에는 addContentView라는 메소드를 이용햇 추가할 View와 크기 옵션을 설정하면 됨
안드로이드나 IOS가 view를 직접 추가하지 않고 액티비티나 ViewController라는 개념을 도입한 이유는
view를 화면에 직접 출력하게 되면 view에 출력할 데이터를 view가 소유하고 있어야 하는데 하나의 화면에 여러 개의 view가 놓이게 되면
model을 만드는 것이 너무 어려움
이벤트 관리와 데이터 관리 및 뷰의 배치는 액티비티나 뷰컨트롤러가 관리하고 뷰는 화면 출력만 담당하도록 함
안드로이드에서 액티비티 사용
- 보안상의 이유로 매니페스트에 등록(버전 업에 따라 자동 등록 됨)
- 액티비티 클랙스 이름을 작성할 때 현재 애플리케이션 내의 액티비티는 패키지 이름을 전부 작성할 필요 없이 .클래스이름 으로 작성
가시적 프로세스: 현재 화면에 출력은 돼 있지만 사용자와의 상호작용은 하지 않음
서비스 프로세스: 화면에 출력은 돼있지 않지만 작업은 수행하고 있는 것
백그라운드 프로세스: 사용자가 볼 수 없는 액티비티를 한개 이상 포함하고 있는 프로세스
비어있는 프로세스: 실행되는 애플리케이션을 포함하지 않으면 새로 실행되는 애플리케이션을 호스팅 하기 위해 메모리에 남아있는 프로세스
안드로이드는 액티비티를 스택을 이용해 관리
액티비티의 상태
- 활성 상태(active)
- 일시 정지 상태(paused)
- 정지 상태(stopped)
- 종료(finish)
oncreate: 액티비티가 처음 만들어질 때 호출,
뷰, 액티비티의 초기화를 수행
onrestart: 액티비티가 다시 시작될 때 호출되는 메소드
onstart: oncreate, onrestart가 호출된 후 호출됨.
onresume: Activity가 활성화 될 때 호출되는 메소드, 화면에 출력될 때 호출되는 메소드
onpause: 액티비티가 비활성화 될 때 호출되는 메소드,
저장해야 하는 데이터가 있으면 전부 저장
ex) 음악 재생 중 전화 수신 후 음악을 이어서 재생하고자 하면 이 메소드에 재생 시간 저장
onPause가 호출되고 나면 애플리케이션은 언제든지 메모리에서 삭제될 수 있음
onstop: onPause가 호출되고 화면에서 보이지 않게 될 때 호출되는 메소드
ondestroy: Activity가 파되될 때 호출되는 메소드
isFinishing이라는 속성을 확인하면 애플리케이션이 종료 시킨 것인지 시스템이 종료시킨 것인지 확인 가능
하위 데이터 출력 시 화면의 호풀
상위 액티비티 -> 하위 액티비티
상위에서 하위로 이동할 때는 상위에서 하위를 생성시킴,
하위 액티비티에서는 onCreate, onResume이 모두 호출
하위에서 상위로 이동할 때는 하위가 가리고 있던 부분을 다시 출력하는 것,
상위 액티비티에서는 onResume만 호출됨
액티비티 상태 저장
- Activity가 종료되었다가 다시 만들어지는 경우에 이전 내용을 복원하기 위한 것
- 회전이 발생하면 Activity를 새로 만듦
onSaveInstanceState 메소드를 오버라이딩해서 Bundle에 데이터를 저장하면
onCreate 메소드가 호출될 때 내용이 전달됨
마지막 상태를 전달했다가 액티비티가 시작될 때 다시 복원하고자 하면 Bundle을 이용.
Bundle은 Map과 유사함
EditText는 설정하지 않아도 스스로 데이터를 저장해뒀다가 다시 출력할 때 복원함