<<3장 정리>>

 

-안드로이드 애플리케이션 구성요소

액티비티 : 어플리케이션의 프레젠테이션 계층. 그래픽 사용자 인터페이스를 형성. := 폼.

서비스 : 보이지 않는 컴포넌트. 백그라운드 실행

콘텐츠 공급자 : DB. 관리 및 공유 가능. 어플리케이션 간 접근 및 노출을 관리한다.

인텐트 : 메시지 전달 프레임워크.

브로드캐스트 수신자 : 인텐트 브로드캐스트 소비자. 이벤트 필터에 수신되면 어플리케이션을 시작.

알림 : 사용자 알림 프레임워크. (전화 수신 시 불빛 및 소리로 알림)

 

-매니페스트

컴포넌트의 구조 및 메타데이터를 정의.

1.application : 오직하나의 어플리케이션 노드만을 가짐. 타이틀, 아이콘 등의 메타데이터를 지정. 액티비티 서비스 등의 태그를 담는 컨테이너.

1-1.activity : 모든 액티비티에 필요. 정의되지않은 액티비티 실행시 런타임 예외가 던져질 것이다.

1-2.service : 사용되는 각 서비스 클래스에 대해 새로운 service태그를 하나씩 생성한다.

1-3.provide : 각각의 콘텐츠 공급자에 대해 사용된다. 데이터베이스 접근과 공유를 관리한다.

1-4.receiver : 어플리케이션을 띄우지 않고도 브로드캐스트 수신자를 등록 가능. 인텐트가 방송될 시 전역 이벤트 리스너로서 처리할 수 있다.

2.uses-permission : 다른 어플리케이션의 사용을 위한 권한을 설정. 설치 과정 중 사용자에게 제시되여 결정. 비용이 수반되는 어플 같은 경우에 접근을 제한하기 위해 사용.

3.permission : 어플리케이션에 대한 접근을 제한하기 위해 사용. normal, dangerous 등으로 허용 및 제한.

4.instrumentation : 액티비티와 서비스를 테스트 하기 위한 프레임워크를 제공. 리소스와의 상호작용을 모니터.

 

-매니페스트 에디터

매니페스트 구성을 위한 GUI제공

 

-어플리케이션 수명 주기

어플은 자신의 수명주기를 제어할 수 없음. 안드로이드 런타임에 의해 배타적으로 관리. 종료에 대한 유념이 필요.

 

-어플리케이션 우선순위와 프로세스 상태

1.활성 프로세스 : 화면에 보이고 사용자에 의해 조작되는 어플.

2.화면에 보이는 프로세스 : 실행 어플 뒤, 혹은 보이긴 하지만 비활성상태의 프로세스.

3.서비스 : 실행되고 있는 서비스.

4.백그라운드 프로세스 : 화면에 보이지 않고, 실행중이지도 않은 서비스.

5.빈프로세스 : 종료된 어플을 캐쉬에 유지한다.

<여기서 토론 내용 : 어플간의 우선순위는 각 어플의 컴포넌트중 최고 순위의 컴포넌트의 우선순위로 대신한다. 각 어플은 자신의 컴포넌트를 스택의 형태로 메모리 업 다운 하여 관리하며 가장 하위의 컴포넌트부터 제거 대상이 된다.>

 

-리소스 외부화

res 폴더 밑에 저장. value, drawable, layout, animation, XML, style, resource 7가지의 타입.

1.간단한 값 : define정도의 개념. 간단한 값들을 저장함.

res/values 저장. 종류마다 분리하여 파일로 저장. ex>res/values/strings.xml

2.문자열 : 문자열 스타일링. HTML태그 지원 (<b>,<i>등) String.format사용시에는 HTML태그 미지원(escape해서 사용가능)

3.색상 : #알파채널+두자리16진수

4.치수 : 숫자 밑 단위에 대한 define. dp, sp의 개념을 잘 이해하지 못 하였음.

5.스타일과 테마 : 룩앤필의 일관성을 유지. 스타일의 묶음을 테마로 이해.

6.드로어블 : 나인패치(조사할 것) 가변 png파일 사용.

7.레이아웃 : XML로 UI분리. onCreate메서드에서 setContentView를 통해 액티비티에 “부풀려서” 채워진다.

res/layout폴더안에 각기 별도의 파일로 저장. 파일 이름이 리소스 식별자.

8.애니메이션

·트윈드 애니메이션 : 뷰를 alpha(fa

·프레임 바이 프레임 애니메이션 : /res/drawable 에 저장. 파일이름이 리소스 식별자. 지정된 지속시간 동안 일련의 드로어블을 보여줌.

 

-리소스 사용하기

안드로이드 자체 시스템 리소스 제공. 코드에서 직접 사용가능하며 리소스에서 다른 리소스를 참조 가능함.

·코드에서는 static 클래스 R을 사용.

ex>setContentsView(R.string.app_name)

(app_name과 같은 변수는 리소스의 위치에 대한 참조일 뿐 인스턴스는 아님. (일종의 포인터))

·리소스에서는 다른 리소스의 변수를 속성값으로 참조 가능. @표기법사용

ex>attribute="@[packagename:]resourcetype/resourceidentifier"

·시스템리소스 : android.R로 사용

code ex>CharSequence httpError = getString(android.R.string.httpErrorBadUrl);

xml ex>android:text="@android:string/ttpErrorBadUrl"

·현재테마에서 스타일참조하기 : UI의 일관성을 유지하기위한 방법 = 테마,스타일.

@대신 ?android: 사용.

(논의 되었던 부분을 다시 보니 일반 리소스를 리소스에서 참조할때는 ‘@’를 사용하고 스타일을 참조할때는 ‘?’를 사용한다는 간단한 내용인듯 합니다. 다만, 현재 안드로이드에 적용되어있는 테마(전반적인 분위기를 이미 정해놓은...)에서 스타일을 참조한다는 점이 자신이 만드는 어플리케이션을 배경화면이나 다른 어플리케이션과도 UI적 일관성을 맞추어준다는 내용으로 이해가 됩니다. 생각해보시고 다른점이 있다면 말씀해주세요-.)

 

-여러가지 언어와 하드웨어를 위한 리소스 만들기

리소스 외부화를 통해 다양한 언어, 위치, 하드웨어 구성등의 통합적인 구성을 정의할 수 있음. resource (res/) 폴더 밑에 ‘-’으로 한정자들을 사용하여 계층 폴더로서 구현.

[한정자 : 언어, 지역, 화면방향, 화면 픽셀 밀도, 터치스크린 타입, 키보드 사용, 키보드 입력 타입, UI탐색 타입, 화면 해상도 등을 나열한 순서에 맞게 단 1개씩을 사용가능하다]

ex>drawable-en-rUS, drawable-land-notouch-nokeys-320x240 등

 

-런타임 구성변경

실행 환경이 변화되면 안드로이드가 각 어플리케이션을 종료하고 재시작하여 리소스값을 다시 읽어들임. (논의 되었던 부분으로 과연 어플을 화면에서도 죽이고 나서 restart시키는지는 확인해 봐야 할 것 같습니다.)

이를 피하기위해 onConfigurationChanged 메소드를 재정의하여 변화된 런타임 구성에 맞게 코딩해 주어야 함.

 

-액티비티 수명주기

어플의 수명은 안드로이드가 전적으로 관리하며 우선순위에 의거 프로그램을 강제 종료하여 리소스를 확보. 어플의 우선순위는 어플에서 사용중인 액티비티의 우선순위중 가장 높은 우선순위에 의해 결정된다.

 

-액티비티 스택

새로운 액티비티가 발생하면 stack의 가장 상위에 push됨.

안드로이드에 의해 리소스 확보를 위해 강제 종료되는 순서는 스택의 가장 밑부분.

(논의 결과 정확한 스택구조로 이해하기 힘들며 스택 순서에 맞지 않는 화면 전환에 관한 문제는 다같이 생각해 보아야 하겠음)

 

-액티비티 상태 : 활성, 일시중지, 중지, 비활성 (이름 그대로의 상태)

 

-수명 상태 변화 모니터링

·전체수명 : create에서 destory까지의 전체수명

·가시수명 : start되어 눈에 보이기 시작하여 stop 되어 화면에서 보이지 않을때 까지의 수명

·활성 수명 : 실제로 어플이 load되어 run 되는 수명. resume과 pause를 반복하는 상태.

(pause와 stop, destroy에 대한 논의. pause/resume 시의 전환 속도를 위하여 가장 적은 리소스를 상태저장하고 운용해야 한다고 결론)

 

-안드로이드 액티비티 클래스 : SDK에서 위젯의 사용을 편리하게 도와주는 하위클래스들.

MapActivity : MapWidget 관련 리소스처리를 캡슐화.

ListActivity : Listview를 탑재하고 리스트 선택을 위한 이벤트 핸들러를 노출하는 액티비티.

ExpandableListActivity := ListActivity. 확장된 개념.

ActivityGroup : 한 화면에 복수의 액티비티를 넣음.