Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Eclipse
- JavaScript
- release unsigned
- R프로그래밍
- spring
- css
- Android Apk 이름
- error
- fragment
- DataTable
- jQuery
- CSS사용법
- Android Apk 이름 변경
- Exception
- html
- Android
- Program type already present
- apache gzip
- 안드로이드
- tomcat
- java error
- Kotlin
- release Apk
- Firebase
- Java
- Android Apk
- MySQL
- android fragment
- FLUTTER
- android error
Archives
- Today
- Total
selfstarter
Android 기본요소(4대 Component 정리) 본문
출처 : https://developer.android.com/guide/components/fundamentals
애플리케이션 기본 요소
- 여러진입점을 어떻게 제공하는지
- 사용자가 앱 아이콘 클릭, 알림, 다른앱으로 시작 가능.
- broadcast receiver, 서비스 등으로 ui 없이 백그라운드 작업을 실행할 수 있음
안드로이드 보안
- Android SDK 도구는 모든 데이터 및 리소스 파일과 함께 코드를 컴파일하여 하나의 APK 생성
- APK 파일로 앱 설치 및 콘텐츠 사용 가능
- 안드로이드 자체가 보안샌드박스(안드로이드 운영체제는 멀티박스 LINUX 시스템. 앱은 다른 앱과 격리된 상태로 실행)
- 격리되었기에 각 앱이 안전한 환경이고, 최소의 액세스 권한만 가짐
다른 앱 엑세스
- 두 개의 앱이 같은 Linux 사용자 ID를 공유하도록 설정. ID가 같으면 같은 프로세스에서 실행, VM 공유(같은 인증서로 사용해야함)
- 연락처, SMS, 저장소, 카메라 등 엑세스 권한 요청할 수 있음(메뉴얼)[https://developer.android.com/training/permissions/index.html]
앱 구성 요소
- Android 필수 기본 구성 요소(액티비티, 서비스, Broadcast Receiver, 콘텐츠 제공자)
- 각 구성 요소는 시스템이나 사용자가 앱에 들어올 수 있는 진입점
- 생명주기가 있고 생성, 소멸 방식 정의
- 카메라 기능이 필요할 경우 카메라 기능 액티비티를 호출만 하면 됨
- 이 때 프로세스는 휴대폰의 프로세스에 속하지 않고 카메라 앱에 속한 프로세스가 실행 됨(단일한 진입지점X)
- 다른 앱에 구성요소를 활성화하려면 인텐트를 밝혀야함
액티비티
- 사용자와 인터페이스를 포함한 화면 하나로 상호작용하는 진입점
- 메일앱이라면 이메일작성 액티비티1개, 이메일 리스트 액티비티 1개 등..
- 액티비티 별로 독립적이므로 다른앱 액세스를 허용할 경우 여러 액티비티 중 1개를 접근할 수 있다
- 프로세스 시스템에서 계속 실행, 액티비티 우선순위, 프로세스 종료 시 이전 액티비티 복원되도록 도와줌
- Activity LifeCycle
- Activity intro
서비스
- 백그라운드에서 앱을 계속 실행하기 위함(인터페이스 제공x)
- 음악 재생, 네트워크 통신으로 데이터 가져오기 등..
- 음악 재생 시 두가지 서비스가 시작되고 각자 시스템 변경을 한다
- 바인딩된 서비스는 A프로세스가 프로세스B에 바인딩 된 경우 A를 위해 B를 실행해야한다(라이브 배경화면, 알림, 화면보호기, 입력 메서드..)
- Service참고
- Service intro
Broadcast Receiver
- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달하도록 지원하는 구성 요소
- 앱이 시스템의 모든 브로드 캐스트 알림에 응답할 수 있게 만듬(현재 실행하지 않은 앱도 가능)
- 상태 표시줄에 알림을 생성
- Broadcast Receiver
콘텐츠 제공자
- 파일시스템, SQLite 데이터베이스, 웹, 앱에 액세스할 수 있는 모든 영구 저장 위치에 저장이 가능한 앱데이터를 관리
- 콘텐츠 제공자로 수정도 가능(사용자 연락차 콘텐츠 제공자로 연락처를 읽고 쓸 수 있다)
- URI 네임스페이스에 넣을 데이터를 매핑할 방식을 경저하고, 해당 URI를 다른 엔터티에 전달할 수 있음
- URI는 웹 URI 처럼 해당 콘텐츠를 소유하기 위한 지표
- URI는 보안이 좋음. 콘텐츠 제공자를 거쳐야하고, 클립보드에서 해당 URI를 액세스하려고 하면 임시 URI권한을 부여. 해당 데이터만 접근하도록 함
- ContentProvider
- 콘텐츠 제공자
구성 요소 활성화
- 콘텐츠 제공자 외에 액티비티, 서비스, Broadcast Receiver는 인텐트라는 비동기식 메시지로 활성화 됨
- 인텐트는 다른 구성 요소로 부터 작업을 요청하는 역활을 함(Intent)
- 인텐트는 명시적 인텐트(전화, 메시지 등..), 암시적 인텐트(사진, 문서 열기)로 나뉜다
- 액티비티, 서비스는 URI로 요청을 설정할 수 있다
- Broadcast Receiver는 단순 브로드캐스트될 알람 정의(ex. 베터리 부족 시 작업 문자열만 포함)
- 콘텐츠 제공자는 Intent 대신 [ContentResolver](https://developer.android.com/reference/android/content/ContentResolver.html 로 작업
- ContentResolver를 사용하게 되면 콘텐츠 제공자와 정보를 요청하는 구성 요소 사이에 추상화계층이 하나 생김(보안 목적)
구성 요소 활성화 메서드
- 액티비티는 Intent를 startActivity() 또는 startActivityForResult()에 전달
- 서비스는 Android 5.0(API 레벨21) 이상에서는 JobScheduler 클래스를 사용하여 작업 예약 가능.Intent를 bindService()에 전달하여 바인딩 가능
- 브로드캐스트는 sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast() 메서드에 Intent 전달
- 콘텐츠 제공자가 쿼리를 수행하려면 ContentResolver에서 query() 수행
- 인텐트 및 인텐트 필터
매니페스트 파일
- 매니페스트 파일(AndroidManifest.xml)을 읽어서 앱 구성 요소가 존재하는지 확인
- 모든 구성 요소 선언 필요
- 앱 프로젝트 디렉토리 루트에 있어야 함
- 앱이 요구하는 모든 사용자 권한(인터넷 엑세스, 사용자 연락처 읽기 액세스) 식별
- 앱 API 레벨 선언
- 앱에서 사용하거나 요구하는 하드웨어 및 소프트웨어 기능(ex. 카메라, 블루투스 서비스, 멀티터치 등..) 선언
- 앱이 링크되어야 하는API 라이브러리(ex. google Maps 라이브러리)선언
매니페스트
- android:name 특성이 Activity 하위 클래스의 완전히 정규화된 클래스 이름
- android:label는 액티비티 사용자에게 표시되는 레이블 문자
- 모든 앱 구성 요소를 선언해야함. 포함되지 않으면 시스템에 표시되지 않고, 실행될 수 없음
- Broadcast Receiver는 매니페스트에서 선언해도 되고 Broadcast Receiver로 동적으로 생성한 다음 시스템에 등록해도 됨.(registerReceiver() 사용)
- 액티비티
- 서비스
- Broadcast Receiver
- 콘텐츠 제공자
- AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:icon="@drawable/app_icon.png" ... > <activity android:name="com.example.project.ExampleActivity" android:label="@string/example_label" ... > </activity> </application> </manifest>
구성 요소 기능 선언
- 암시적 인텐트로 수행할 작업을 사용자가 선택할 수 있다
- 인텐트를 service에 바인딩할 경우 명시적 인텐트를 사용하여 앱 보호 필요(어떤 앱을 응답할 것인지 모르므로)
- 앱의 매니페스트에서 엑티비티 선언 시 액티비티의 기능을 선언하는 인텐트 필터를 포함시켜 다른 앱으로 부터 인텐트 응답하게도 가능
- 인텐트 필터(
요소를 해당 구성 요소의 선언 요소에 하위로 추가하면 인텐트 필터 선언 가능) - 아래 예제는 이메일을 작성하는 액티비티가 포함된 이메일앱을 빌드 시 Send 인텐트에 응답하는 인텐트 필터 선언
<manifest ... > ... <application ... > <activity android:name="com.example.project.ComposeEmailActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <data android:type="*/*" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
앱 요구사항 선언
- Android폰은 각자 기능이 다르다 > 앱에 필요한 기능이 없는 기기가 있을 수 있다
- 이런 불상사를 방지하려면 앱이 지원하는 기기 유형에 대한 프로필을 명확하게 정의하는 것이 중요 > 매니페스트 파일에 기기와 소프트웨어 요구사항 선언
- 정보성이지만 외부 서비스(ex. Google Play)가 선언을 읽기도 함
- 카메라가 필요하고 API레벨 7에 도입된 API 사용 시 매니페스트 파일에 요구사항을 다음과 같이 선언 > 조건이 맞지 않으면 설치 안됨
- 카메라를 사용하기에 필수가 아니라고 선언 시 required 속성 false
- 기기호환성
<manifest ... > <uses-feature android:name="android.hardware.camera.any" android:required="true" /> <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" /> ... </manifest>
앱 리소스
- 안드로이드 앱에는 다양한 앱리소스가 존재(ex.이미지, XML, 사운드 파일 등..)
- Android 프로젝트에 포함하는 리소스마다 SDK 빌드 도구가 고유한 정수 ID로 정의
- 이 ID로 앱코드에서 리소스나 XML로 정의된 다른 리소스에서 참조 가능(이미지 drawable/에 이미지 저장 시 R.drawable.image 라는 리소스 ID 생성)
- 여러 기기에 대응되는 리소스를 제공할 능력이 있음(다국어 지원)
- 리소스에 대해 한정자 제공. 기기 방향에 따라 레이아웃이 달라지는 것도 레이아웃의 디렉토리 이름으로 적용 가능
- 리소스
- 앱 아키텍처 가이드
'App > Android' 카테고리의 다른 글
The library com.google.android.gms:play-services-basement is being requested by various other libraries at.. (0) | 2020.02.06 |
---|---|
How to make aar file in android studio (0) | 2020.02.01 |
android admob 광고달기 (0) | 2019.08.05 |
Android Project Github에 올리기 (0) | 2019.07.02 |
Android 글자 크기 키우기 (0) | 2019.06.30 |
Comments