*/Android

[안드로이드] ① Manifest / 4대 컴포넌트 / Intent

sssbin 2022. 9. 27. 01:03

 

✅ Manifest 개요

 https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ko

 

- 모든 앱 프로젝트는 AndroidManifest.xml 파일을 포함해야 한다.

매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명한다.

매니페스트 파일은 다음과 같은 내용을 포함한다.

    · 앱의 패키지 이름

    · 앱의 구성 요소

    · 앱이 시스템 또는 다른 앱의 보호된 부분에 액세스하기 위해 필요한 권한

    · 앱에 필요한 하드웨어 및 소프트웨어 기능

 

 

 

✅ Manifest 주요 속성 10가지

1) <menifest> 

- AndroidManifest.xml 파일의 루트 요소로, <application> 요소를 포함해야 한다.

- xmlns:android 및 package 속성을 지정한다.

 

2) <application>

- 애플리케이션의 각 구성요소를 선언하는 하위 요소를 포함하며 모든 구성요소에 영향을 줄 수 있는 속성을 가지고 있다.

- 이러한 속성 중 다수(예: icon, label, permission, process, taskAffinity, allowTaskReparenting)는 구성요소의 상응하는 속성에 기본값을 설정하고, 그 외 속성(예: debuggable, enabled, description, allowClearUserData)은 애플리케이션의 값을 전체적으로 설정하며 구성요소별로 재정의할 수 없다.

 

3) <activity>

- 애플리케이션의 시각적 사용자 인터페이스 요소를 구현하는 activity를 정의한다.

- 모든 activity는 매니페스트 파일의 <activity> 요소로 나타내야 한다. 여기에 선언되지 않은 activity는 시스템에 표시되지 않으며 실행되지 않는다.

 

4) <service>

- service를 정의한다.

- 시각적 사용자 인터페이스가 없다.

- 오래 실행되는 백그라운드 작업이나 다른 애플리케이션에서 호출할 수 있는 리치 커뮤니케이션 API를 구현하는 데 사용된다.

- 모든 service는 매니페스트 파일의 <service> 요소로 나타내야 한다. 여기에 선언되지 않은 service는 시스템에 표시되지 않으며 실행되지 않는다.

 

5) <receiver>

- broadcast receiver를 정의한다.

- broadcast receiver를 사용하면 애플리케이션의 다른 구성요소가 실행되고 있지 않을 때도 시스템이나 다른 애플리케이션에서 브로드캐스트하는 인텐트를 애플리케이션에서 수신할 수 있다.

- <receiver> 태그 안에 intent filter를 정의하여 어떠한 브로드캐스트 메시지에 반응할지를 지정할 수 있다.

 

6) <provider>

- content provider를 정의한다.

- content provider는 애플리케이션 내의 데이터베이스를 다른 애플리케이션이 공유할 수 있도록 해주는 역할을 한다.

- 모든 content provider는 manifest 파일의 <provider> 요소에서 정의해야 한다.

 

7) <intent-filter>

- activity, service, broadcast receiver가 응답할 수 있는 인텐트의 유형을 지정한다.

- 상위 구성요소의 기능, 즉 각 활동이나 서비스가 할 수 있는 작업과 수신기가 처리할 수 있는 브로드캐스트의 유형을 선언한다.

- 전달되는 유형의 수신 인텐트로 구성요소를 열고 이 구성요소에 유의미하지 않은 인텐트를 필터링한다.

 

8) <action>

- intent filter에 작업을 추가한다.

- <intent-filter> 요소에 <action> 요소가 하나 이상 포함되어야 한다. intent filter에 <action> 요소가 없으면 필터가 Intent 객체를 허용하지 않는다.

 

9) <category>

- intent filter에 카테고리 이름을 추가한다.

 

10) <uses-permission>

- 앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한이다.

- 애플리케이션이 설치될 때 또는 앱이 실행중일 때 사용자에게 권한이 부여된다.

 

 

 

✅ 4대 컴포넌트

https://developer.android.com/guide/components/fundamentals?hl=ko 

 

- 각 컴포넌트는 독립적인 형태로 존재한다.

- 각 컴포넌트는 고유한 기능을 수행한다.

- 각 컴포넌트는 Intent를 통해 상호작용한다.

 

1) Activity

- 사용자와 상호작용을 담당하는 인터페이스

- 모든 안드로이드 애플리케이션은 하나 이상의 액티비티로 구성되어 있다.

- 생명주기 관련 메서드들을 재정의하여 원하는 기능들을 구현할 수 있다.

- 여러 개의 액티비티를 동시에 호출할 수 없다.

- 다른 애플리케이션의 액티비티를 호출할 수 있다.

 

2) Service

- 백그라운드에서 실행되는 구성요소

- 오랫동안 실행되는 작업을 수행하거나 원격 프로세스를 위한 작업을 수행한다.

- 사용자 인터페이스를 제공하지 않는다.

- 예) 음악 재생, 데이터 동기화 등

 

3) BroadCast Receiver

- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성요소

- 앱이 시스템 전체의 브로드캐스트 알림에 응답할 수 있게 한다.

- 현재 실행되지 않은 앱에도 시스템이 브로드캐스트를 전달할 수 있다.

- 예) 배터리 부족 알림, 사진 캡처 알림 등

 

4) Content Provider

- 저장 가능한 앱 데이터의 공유형 집합 관리

- 다른 앱은 콘텐츠 제공자를 통해 해당 데이터를 쿼리하거나, 콘텐츠 제공자가 허용할 경우 수정도 가능하다.

- 예) 안드로이드 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공한다.

 

 

 

✅ Intent

https://developer.android.com/guide/components/intents-filters?hl=ko 

 

- 인텐트는 메시징 객체로, 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있다.

   1) 액티비티 시작

     - Activity의 새 인스턴스를 시작하려면 Intent를 startActivity()로 전달

     - Intent는 시작할 액티비티를 설명하고 모든 필수 데이터를 담는다.

     - 액티비티가 완료되었을 때 결과를 수신하려면 startActivityForResult() 호출

     - 액티비티는 해당 결과를 onActivityResult() 콜백에서 별도의 Intent 객체로 수신

  2) 서비스 시작

     - Android 5.0(API 레벨 21) 이하 버전은 Service 클래스의 메서드를 사용하여 서비스 시작

     - 일회성 작업 수행 -> Intent를 startService()에 전달

     - Intent는 시작할 서비스를 설명하고 모든 필수 데이터를 담고 있다.

   3) 브로드캐스트 전달

     - Intent를 sendBroadcast() 또는 sendOrderedBroadcast()에 전달

 

- 인텐트 유형

   1) 명시적 인텐트: 인텐트를 충족하는 애플리케이션이 무엇인지 지정

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

   2) 암시적 인텐트: 수행할 일반적인 작업 선언

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