Activities
activity 라는 컴포넌트가 있다.
이 컴포넌트는
- 유일하게 화면을 다룰 수 있는 기능을 제공한다.
- 이 화면은 사용자의 터치 입력을 받을 수 있다.
- 화면이 작기에 명확한 목적이 있는 기능과 정보를 제공해야 한다.
=> 화면 + 터치(사용자 입력) + 명확한 기능 정보
위의 기능들을 종합적으로 제공하는 컴포넌트의 이름을 짓는데 Activity(활동)라는 단어가 가장 적합하다고 생각한 것 같다.
공식문서에 나온 내용으로 조금 더 이 Activity 를 이해해보자면, Activity와 System간에 서로 상호작용하는 point가 있다.
- 시스템은 실행중인 process 를 상황에 따라 kill/terminate 할 수 있는 권한을 갖는다. activity가 실행중이라면 시스템은 해당 process 를 계속 동작 할 수 있게 해준다.
- 위와 비슷한 얘기로, A앱을 사용중 B앱을 이용할 경우, A앱을 다시 사용할 가능성이 있으므로 A앱의 종료 우선순위를 낮춘다.
- Activity는 자기 자신의 프로세스를 종료하도록 시스템에 요청 할 수 있다. 이를 통해 사용자는 자연스럽게 바로 직전에 사용하던 앱으로 돌아갈 수 있다.
- 앱들간에 서로를 호출하여 user flow를 구현하면 system은 이 flow를 적절하게 조정하는 역할을 한다. 대표적인 예: 공유(SNS -> 공유 -> 사용자가 선택한 공유하고자 하는 앱으로 이동 -> 다시 원래 앱으로 되돌아 옴.)
User flow란? 사용자가 정해진 작업을 수행하기위한 흐름(순서)
Services
앱이 background 에서 작업 필요시 사용. UI를 제공하지 않음.
음악재생, 파일 다운로드 등이 대표적인 예
Started Services
- 작업이 끝날 때까지 계속 동작하도록 시스템에 요청
Ex) 음악 재생 시 서비스를 사용. notification에 재생중임을 알림.
- 좀더 일반적인 서비스는 사용자가 실행되는지 알 수 없음. 시스템에서 불시에 kill 할 수 있음.
Bound Services
다른 앱에 서비스를 제공하고 싶은 경우. A가 B에 바인드 했다면 시스템은 B프로세스를 계속 동작 시킴
Live wallpapers, notification listeners, screen savers, input method, accessibility service 등 다양한 서비스를
앱간에 서비스를 제공하거나 제공받을 수 있음.
안드로이드 5.0 (API 21) 이상에서는 JobScheduler 클래스를 사용하면 베터리를 절약 할 수 있음.