Skip to main content

Command Palette

Search for a command to run...

[Android] Fragment, Context, Intent

Updated
2 min read
[Android] Fragment, Context, Intent

더 잘하고 싶은 안드로이드 개발자.

https://github.com/jinukeu

프래그먼트(Fragment)

정의

  • 앱 UI의 재사용 가능한 부분을 나타낸다.

  • 자체 layout을 정의하고 관리한다.

  • 자체 lifecycle을 가지고 있으며 input event 역시 직접 처리한다.

Fragment는 혼자서는 존재할 수는 없으며 Activity 또는 다른 Fragment에 의해 hosted되어야한다.

Fragment의 view 계층은 host view 계층의 부분이 되거나 host view 계층에 attach 된다.

모듈성

프래그먼트는 UI를 분할하여 액티비티의 UI에 모듈성과 재사용성을 도입한다.

장점

  • Fragment를 사용하여 반응형 웹사이트처럼 구현할 수 있다.

  • 액티비티의 UI를 더 쉽게 수정할 수 있게된다. 액티비티가 STARTED 수명 주기 상태 이상에 있는 동안 프래그먼트를 추가/교체/삭제할 수 있다. 이러한 기록을 액티비티 백 스택에 보관할 수 있으며, 변경사항을 취소할 수도 있다.

  • 동일한 프래그먼트 클래스의 여러 인스턴스를 사용할 수 있다. 이 점에 유의하여 자체 UI 관리에 필요한 로직만 프래그먼트에 제공해야 한다. 한 프래그먼트에 의존하거나 다른 프래그먼트에서 프래그먼트를 조작하지 않아야 한다.

Fragment Lifecycle(프래그먼트 생명 주기)

참고 자료

API 28 이상부터 onSavedInstanceState() 함수와 onStop()함수의 호출 순서가 달라진 이유

주의 사항

프래그먼트를 인자와 함께 생성할 때 newInstance()를 사용하는 이유

Context

참고 자료 1
참고 자료 2
참고 자료 3
참고 자료 4
참고 자료 5

Intent

정의

Intent는 메시징 객체로, 다른 앱 구성요소(액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 제공자)로부터 작업을 요청하는 데 사용할 수 있습니다. -> Component를 실행하기 위해 시스템에 넘기는 정보

주요 사용 사례

액티비티 시작

액티비티의 새 객체를 시작하려면 Intent를 startActivity()로 전달하면 됩니다. Intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담습니다.

서비스 시작

Android 5.0 (API 21) 이전 버전에서 Intent를 startService()에 전달하여 서비스를 시작할 수 있습니다. Intent는 시작할 서비스를 설명하고 모든 필수 데이터를 담고 있습니다.

Android 5.0 (API 21) 이상부터는 JobScheduler로도 서비스를 시작할 수 있습니다.

서비스가 클라이언트-서버 인터페이스로 디자인된 경우, 다른 구성 요소로부터 서비스에 바인딩하려면 Intent를 bindService()에 전달하면 됩니다.

브로드캐스트 전달

Intent를 sendBroadcase() 또는 sendOrderedBrocast()에 전달하여 다른 앱에 브로드캐스트를 전달할 수 있습니다.

인텐트 타입

명시적 인텐트

인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출될 대상을 정확히 알 수 있는 인텐트

앱 내의 특정 액티비티나 서비스 등 특정한 앱 구성 요소를 시작하는데 사용하는 인텐트.

암시적 인텐트

호출될 대상의 속성들을 지정했지만 호출될 대상이 달리질 수 있는 인텐트

작업을 지정하여 기기에서 해당 작업을 수행할 수 있는 모든 앱을 호출할 수 있도록 합니다.

ex) 메세지 공유하기 버튼을 누르면 메세지를 공유할 수 있는 모든 앱(카톡, 인스타 등)을 호출합니다. 이때 사용자는 어느 앱을 사용할 지 선택해야합니다.

PendingIntent (보류 인텐트)

참고 자료 1
참고 자료 2

앱이 Android 12를 타겟팅하는 경우 앱에서 만드는 각 PendingIntent 객체의 변경 가능 여부()를 지정해야 합니다. 이 추가 요구사항은 앱의 보안을 강화합니다.

FLAG_IMMUTABLE or FLAG_MUTABLE 적용

PendingIntent mPendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);

More from this blog

단위테스트 2장 정리

단위 테스트의 정의에는 많은 늬앙스가 있다. 크게 고전파, 런던파로 나뉜다. 고전파: 모든 사람이 단위 테스트와 테스트 주도 개발에 원론적으로 접근하는 방식 런던파: 런던의 프로그래밍 커뮤니티에서 시작 단위 테스트의 정의 단위 테스트는 작은 코드 조각을 검증하고 빠르게 수행하고 격리된 방식으로 처리하는 자동화된 테스트다. 격리 문제에 대한 런던파의 접근 코드 조각을 격리된 방식으로 검증한다는 것은 무엇을 의미할까? 런던파에서는 테스트 ...

Sep 3, 20243 min read

단위 테스트 1장 정리

단위 테스트 1장 정리 내용입니다. 단위 테스트에 시간을 투자할 때는 항상 최대한 이득을 얻도록 노력해야하며, 테스트에 드는 노력을 가능한 줄이고 그에 따르는 이득을 최대화해야 한다. 이 책에서 다루는 내용은 비용 편익 분석 방법을 배우고 특정 상황에서 적절한 테스트 기술을 적용할 수 있다. 또한 공통적인 안티 패턴을 피하는 방법도 배운다. 단위 테스트의 목표 단위 테스트의 목표는 무엇인가? 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다...

Aug 27, 20242 min read

23년 하반기 회고

23년 상반기 회고에서 이어지는 글이다. 8 - 9월 이력서 제출 그리고 ... 이력서와 포트폴리오를 만들었다. 꽤나 잘 만들었다고 생각했다. 개발자 지인들의 첨삭, 인프런 멘토링, 유료 이력서 첨삭 서비스를 받으며 칭찬을 꽤 받았기 때문이다. 내가 보기에도 괜찮은 것 같고 ... 다른 사람들이 보기에도 괜찮다고 했으니 서류 합격률은 꽤 높을거라 생각했다. 50개의 서류를 넣은 결과, 3번의 서류 합격 그리고 단 한 곳에서만 최종합격했다. (최...

Jan 1, 20243 min read
23년 하반기 회고

[Android] Compose 수명 주기, 부수효과

수명 주기 개요 컴포지션은 UI를 기술하는 컴포저블의 트리 구조이다.컴포지션은 초기 컴포지션을 통해서만 생성되고 리컴포지션을 통해서만 업데이트 된다. 컴포저블의 수명 주기 컴포지션 시작 리컴포지션 컴포지션 종료 리컴포지션은 일반적으로 State<T> 객체가 변경되면 트리거됩니다. 컴포지션 내 컴포저블의 분석 컴포지션 내 컴포저블의 인스턴스는 호출 사이트(call site)로 식별된다. (호출 사이트는 컴포저블이 호출되는 소스코드 위치...

Dec 22, 20236 min read
[Android] Compose 수명 주기, 부수효과

[Android] rememberUpdatedState 완벽 이해

rememberUpdatedState 정의 공식 문서에는 다음과 같이 적혀있다. 값이 변경되는 경우 다시 시작되지 않아야 하는 효과(Effect)에서 값 참조 포스팅을 정리하면서 정의한 rememberUpdateState는 아래와 같다. remember는 초기 컴포지션에서만 값을 저장하고 리컴포지션 때 들어온 값은 저장하지 않는다. 리컴포지션 때 들어온 값도 저장하고 싶을 때 rememberUpdateState를 사용한다. 이게 도대체 ...

Dec 14, 20234 min read
[Android] rememberUpdatedState 완벽 이해

Jinukeu

33 posts