* 본 게시물은 [핵심만 골라 배우는 안드로이드 스튜디오3 & 프로그래밍] 도서를 참고하여 작성되었습니다.
Activity
액티비티는 컴포넌트를 더 높은 수준의 개념으로 끌어올린, 어플의 기능을 갖는 단일의 독립 실행형 모듈이다. 재사용성, 상호 운용성이 극대화되어있다. 그리고 하나의 사용자 인터페이스 화면과 그 기능에 밀접한 관련이 있다.
EX) 한 일정 관리 어플에서
- 당일날 설정된 일정만 보여주는 화면
- 익월 달력을 보여주는 화면
- 일정을 설정하는 화면
등으로 이루어 진다면 Activity를 사용해 이것들을 하나의 기능적 모듈로 두고, 인터페이스 화면(이벤트 처리 포함)과 함께 관리할 수 있다.
그리고 액티비티끼리는 완전히 독립되어 있다. 따라서 액티비티 사이에 함수나 변수를 공유하는 것은 불가능하다. 그런데 액티비티 사이에 값을 참조해야하는 경우에는 Intent와 Content Provider를 사용하여 값을 다른 액티비티로 넘겨줄 수 있다.
* 참고
Intent = 하나의 액티비티에서 다른 하나의 액티비티를 launching(시작) 시킬 수 있는 매커니즘.
사실 직접 런칭하는 것은 아니고, 안드로이드 런타임에게 어떤 액티비티에 대한 런칭을 요청하는 것임. 그 과정에서 자신의 데이터를 함께 전달할 수 있는 것.
크게 명시적, 암시적 (단일 어플 내 액티비티끼리)/ 브로드캐스트 (특정 어플리케이션끼리) 인텐트로 나뉜다.
Content Provider = 어플리케이션 사이에 데이터를 공유하는 것.
원래 어플리케이션은 자신의 데이터에 대한 접근 권한을 다른 어플에게 제공할 수 있음.
어플 A가 자신의 데이터 중 접근이 허용된 데이터를 추가, 삭제, 조회할 수 있는 콘텐츠 제공자를 구현 -> 콘텐츠 제공자는 URI를 정의하여 접근 권한을 공유 (데이터 파일이나 데이터 베이스 전체의 형태로도 공유 가능) -> 다른 어플리케이션에서 A의 콘텐츠 제공자가 내 놓은 URI를 보고 A의 데이터에 접근
Fragment
프래그먼트는 액티비티 내부에서 독립적으로 어플의 UI를 관리하는 객체이다. 프래그먼트의 추가, 삭제를 통해 어플의 UI를 동적으로 변경할 수 있다.
프래그먼트는 액티비티 내에서 UI의 일부를 나타내므로 액티비티의 일부분으로만 사용될 수 있다. 그래서 프래그먼트를 액티비티의 부속 액티비티라고도 한다. 프래그먼트는 액티비티처럼 자체적인 생명 주기를 갖고 입력 이벤트도 받지만, 자신을 포함하는 액티비티의 생명 주기에 맞추어 동작하기 때문이다.
(액티비티가 실행 중이면 혼자 생명을 끝내고 다른 프래그먼트를 실행하는 등 자유로운데, 액티비티가 멈추어 있다면 프래그먼트는 뭔 짓을 하더라도 독립적으로 실행될 수 없음. 무조건 같이 정지되어야 하는 것.)
그리고 휴대폰이나 태블릿에서 같은 어플을 실행할 경우 달라지는 UI를 구성할 때도 프래그먼트를 사용한다. 이때는 OS 내에 저장된 기본 라이브러리 대신 지원 라이브러리를 사용해야 한다. (EX. android.support.v7.AppCompatActivity 또는 android.support.v4.app.FragmentActivity / android.support.v4.app.Fragment)