공부하다가 모르는게 있어서 쓱쓱 정리하기
Context
공식 문서
- 애플리케이션 환경에 대한 전역적인 정보 인터페이스
- 애플리케이션별 리소스 및 클래스에 대한 접근은 물론 액티비티 런칭, 인텐트 브로드캐스팅 및 수신 등과 같은 애플리케이션 수준 작업에 대한 상향 호출이 가능하다
- 상향 호출: 하위 레이어에서 상위 레이어의 접근이 가능하다
검색
- 애플리케이션/객체의 현재 상태에 대한 컨텍스트(맥락)
- 일반적으로 프로그램의 다른 부분(액티비티, 패키지/애플리케이션)에 관한 정보를 얻기 위해 호출됨
- 예시:
- 새 객체 생성: 뷰, 어댑퍼, 리스너 생성
- 표준 자원 접근:
LAYOUT_INFLATER_SERVICE, SharedPreferences 같은 (시스템) 서비스 접근
- 비명시적으로 컴포넌트 접근: 프로바이더, 브도르캐스트, 인텐트 관련
A Context is a handle to the system; it provides services like resolving resources, obtaining access to databases and preferences, and so on. An Android app has activities. Context is like a handle to the environment your application is currently running in. The activity object inherits the Context object.
컨텍스트는 시스템에 대한 핸들입니다. 리소스 확인, 데이터베이스 및 기본 설정에 대한 액세스 권한 얻기 등과 같은 서비스를 제공합니다. Android 앱에는 액티비티가 있습니다. 컨텍스트는 애플리케이션이 현재 실행 중인 환경에 대한 핸들과 같습니다. 액티비티 개체는 컨텍스트 개체를 상속합니다.
출처: https://stackoverflow.com/questions/3572463/what-is-context-on-android
Intent
공식 문서 1
- 수행할 작업에 대한 추상적인 설명
.startActivity를 사용해 활동을 실행. broadcastIntent를 사용해 관심있는 BroadCastReceiver에 컴포넌트를 보낼 수 있으며, Context.startService(Intent) 또는 Context.bindService(Intent, BindServiceFlags, Executor, ServiceConnection)를 사용해 백그라운드 서비스와 통신
- 서로 다른 애플리케이션의 코드 간에 런타임 바인딩을 수행하기 위한 기능을 제공
- 액티비티를 실행하는데 사용. 각 액티비티를 연결할 수 있음
- 기본적으로 수행할 작업에 대한 추상적인 설명을 포함하는 수동적 데이터 구조
공식 문서 2
출처: https://developer.android.com/guide/components/intents-filters
- 다른 앱 컴포넌트에 작업을 요청하는 데 사용할 수 있는 메세지 개체
- 여러가지 방법으로 구성 요소 간의 통신을 진행함.
인텐트 타입
- 명시적 인텐트: 전체 ComponentName을 지정하여 어떤 애플리케이션의 컴포넌트가 인텐트를 충족할지 지정. 실행하려는 액티비티나 서비스의 클래스 이름을 알고 있기 때문에 일반적으로 명시적인 인텐트를 사용하여 자신의 앱에서 컴포넌트를 실행.
- 예를 들어 사용자 작업에 대한 응답으로 앱 내에서 새 액티비티를 실행하거나 백그라운드에서 파일을 다운로드하는 서비스를 실행할 수 있음.

인텐트가 액티비티를 실행하는 예시
- 비명시적 인텐트: 특정 컴포넌트의 이름을 지정하지 않고 대신 수행할 일반 작업을 선언하여 다른 앱의 컴포넌트가 이를 처리할 수 있도록 함
- 예를 들어 사용자에게 지도의 위치를 표시하려는 경우 비명시적 인텐트를 사용하여 다른 지원 앱이 지도에 지정된 위치를 표시하도록 요청
- 이를 사용할 때 안드로이드는 기기의 다른 앱에 있는 manifest files에 선언되어 있는 인텐트 필터와 비교해 적절한 구성요소를 찾음. 일치하면 해당 컴포넌트를 실행
인텐트 만들기
- 인텐트가 포함하는 기본 정보 (apply로 지정할 수 있음):
- 컴포넌트 이름: 시작할 컴포넌트의 이름. 선택적이지만 중요한 정보다. 서비스를 시작할 경우는 필수임.
- 액션: 수행할 일반 작업을 지정하는 문자열
- 데이터: 작업할 데이터 및/또는 해당 데이터의 MIME 유형을 참조하는 URI
- 카테고리: 처리해야 하는 컨포넌트 종류에 대한 추가 정보가 포함된 문자열
- Extras: 요청된 작업을 수행하는 데 필요한 추가 정보를 전달하는 키-값 쌍
- 플래그: 인테트에 대한 메타데이터. 활동을 시작하는 방법(예: 활동이 속해야 하는 작업)과 활동이 시작된 후 처리하는 방법(예: 최근 활동 목록에 속하는지 여부)을 지시
PendingIntent
- 앱이 아닌 시스템에서 관리하는 토큰에 대한 참조
- 해당 펜딩 인텐트를 소유한 애플리케이션 프로세스가 종료되더라도 펜딩 인텐트 자체는 해당 토큰을 제공받는 다른 프로세스에서 계속 사용할 수 있음
- 외부 애플리케이션에 펜딩 인텐트를 보내면 외부 애플리케이션은 같은 권한을 부여 받은 것처럼 작업을 할 수 있음
- 위와 같은 특성 덕에 추후에 수행될 작업을 선언하는 데 사용되기도 함
- 유저가 알림, 앱 위젯과 관련된 행동을 사용할 때, 또는 특정 시기에 실행되는 작업을 사용할 때 인텐트 선언
어떤 글에서는 PendIntent를 이렇게 설명한다.
PendingIntent는 Intent의 포장지입니다. 외부 앱은 PendingIntent를 받지만 Intent의 내용 자체는 모릅니다. 외부 앱은 특정 조건을 만족했을 때 보낸 곳으로 다시 intent를 보냅니다.
출처: