안드로이드와 앱/안드로이드

안드로이드 앱개발 4주차 강의 [액티비티]

정혜현 2024. 6. 19. 15:40

액티비티 Activity

사용자가 직접 상호작용하는 창 window

setContentView()를 통해 XML을 UI로 설정

 

 

안드로이드 4대 컴포넌트

  • 액티비티 Activity
  • 서비스 Service : 백그라운드에서 오랜 시간 동안 실행되어야 하는 작업을 수행하는 역할
  • 브로드캐스트 리시버 Broadcast Receiver : 앱이 안드로이드 시스템으로부터 발송되는 다양한 이벤트, 정보를 받을 수 있게 해주는 역할
  • 콘텐트 프로바이더 Content Provider : 앱 간 데이터 공유할 수 있게 해주는 역할

생명주기와 콜백메소드

onCreate()

호출시기 : 액티비티 생성시 호출

특징 : 필수이며 생명주기 단 한번만 수행

구현사항 : 레이아웃, 뷰, 바인딩, 설정 등 값 초기화나 시작로직. setContentView같은 xml파일을 세팅해주는 코드는 onCreate()의 종속적인 메소드

 

onStart()

호출시기 : onCreate()를 호출한 뒤 STARTED상태에 호출
특징 : 액티비티가 화면에 보여지기 직전이며 매우 빠른 속도로 실행
구현사항 : 액티비티가 사용자에게 보여지고 foreground 태스크로써 사용자와 상호작용 할 수 있도록 준비하므로 화면에 진입할 때마다 실행되는 작업

 

onResume()

호출시기 : RESUMED상태에 호출
특징 : 액티비티가 화면에 보여지는 직후이며 현 액티비티가 사용자에게 포커스인. 포그라운드에 액티비티가 표시되고 앱이 사용자와 상호작용을 할 수 있는 상태. interrupt(카메라, 전화)가 발생하여 사용자의 포커스가 없어지지 않는 이상 RESUMED상태에 머무른다. interrupt 처리 후 Activity가 다시 화면에 보여지면 다시 onResume() 메소드 호출
구현사항 : onPause() 중에 해제되는 구성요소를 다시 초기화하고 액티비티가 재개될 때마다 필요한 초기화 작업

 

onPause()

호출시기 : 사용자가 잠시 액티비티를 떠났을 때, 다른 액티비티에 포커스 됐을 때 호출
특징 : 액티비티가 화면에 보여지지 않은 직후이며 현 액티비티가 사용자에게 포커스아웃. 현 액티비티가 포그라운드에 있지 않다. 방해 이벤트 및 인터럽트가 발생한 경우, 멀티 윈도우 상 다른 앱에 포커스를 두는 경우. 배터리 수명에 영항을 미치는 시스템 리소스, 하드웨어 센서 할당 해제. 액티비티가 재개되면 메모리 상 남아있는 Activity instance를 다시 불러와 onResume()메소드 호출
구현사항 : 다른 액티비티가 호출되기 전에 실행되므로 무거운 작업 지양. 아주 잠깐 호출 되기 때문에 사용자 데이터 저장, 네트워크 호출, db 트랜젝션을 실행해선 안된다. 

 

onStop()

호출시기 : Stopped상태에 호출
특징 : 다른 액티비티로 완전히 가려진 상태이며 새로 시작된 액티비티가 화면 전체를 차지한 상태
구현사항 : 필요하지 않은 리소스를 해제하거나 조정(예 : 애니메이션을 일시중지하거나, GPS 사용 시 배터리를 아끼기 위해 위치 인식 정확도를 '세밀한 위치' 에서 '대략적인 위치' 로 전환). CPU를 비교적 많이 소모하는 작업 종료 → 어떠한 정보를 DB 에 저장할 타이밍을 모르겠다면 onStop() 상태일 때 저장. 다시 이전 액티비티를 실행하면 onRestart() 호출되고 onStart() 호출

 

onDestroy()

호출시기 : 액티비티가 완전히 소멸되기 직전 호출
특징 : 액티비티가 종료되는 상태이며 finish()가 호출되거나 사용자가 앱을 종료하여 액티비티가 종료되는 경우, 화면 구성이 변경되어(기기 회전 등) 일시적으로 액티비티를 소멸시키는 경우
구현사항 : 사용하고 있는 리소스를 모두 해제하고 생을 마감

 

Q. Orientation Change(화면 회전)시 콜백 메소드 호출 순서
A. onPause() - onStop() - onSaveInstanceState() - onDestroy() - onCreate() - onStart() - onRestoreInstanceState() - onResume()

Q. UI 관련 중지 작업을 할 때 onPause(), onStop()? 
A.onStop()을 사용해야 멀티 윈도우를 사용하여 동시에 두 앱을 구동시키고 있어도 애니메이션 등 UI 구성 요소가 멈추지 않는다. 멀티 윈도우의 다른 앱으로 포커스를 조정하는 순간 onPause() 가 호출되기 때문에 onPause()내 UI 중지 작업을 수행해버리면 멀티 윈도우 상으로 액티비티는 화면에 표시되고 있는데도 UI 가 멈추어버리는 현상이 발생하게 된다.





 

 

 

인텐트 Intent

메시지 객체. 다른 앱 컴포넌트로 작업 요청

 

  • 명시적 인텐트 Explicit Intent : 특정한 컴포넌트 직접적으로 호출. startActivity(), startService()메소드를 통해 해당 컴포넌트를 실행
  • 암시적 인텐트 Implicit Intent : 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정하여 startActivity() 메소드에 넘기면  안드로이드 시스템이 적합한 인텐트 필터를 가진 컴포넌트를 찾아 실행.
    인텐트 필터 : 특정 인텐트에 반응하는 액티비티, 서비스 또는 브로드캐스트 리시버의 능력