Presentation is loading. Please wait.

Presentation is loading. Please wait.

액티비티와 리소스.

Similar presentations


Presentation on theme: "액티비티와 리소스."— Presentation transcript:

1 액티비티와 리소스

2 목차 액티비티 이해 리소스 이해

3 액티비티 이해

4 애플리케이션 개념 Java 언어로 작성 자신의 리눅스 프로세스 내에서 실행 고유한 리눅스 ID가 부여
각 프로세스는 자신의 자바 가상머신을 가짐  각 프로세스는 다른 프로세스와 격리되어 실행 진입점(entry point)이 없고 인텐트(intent)에 의하여 컴포넌트 활성화 고유한 리눅스 ID가 부여 기본적으로 애플리케이션을 구성하는 파일들은 해당 사용자와 해당 애플리케이션에게만 접근 허용 시스템 자원을 절약하기 위하여 2개의 애플리케이션에 대하여 동일한 사용자 ID 공유 가능  동일한 리눅스 프로세스 안에서 실행되며 동일한 가상머신을 공유

5 애플리케이션 개념 느슨하게 결합된 컴포넌트로 구성 애플리케이션 컴포넌트 안드로이드 매니페스트 파일 액티비티(activity)
서비스(services) 컨텐트 제공자(content provider) 방송 수신자(broadcast receiver) 안드로이드 매니페스트 파일 각 컴포넌트간 상호 작용하는 방법을 기술 애플리케이션 구성 요소 선언  APK 외부에서 패키지 구성 요소를 알 수 있게 함 활용하고자 하는 라이브러리 지정 애플리케이션에게 필요한 접근 권한(permission) 등록 인텐트 필터(intent-filter)를 통해 애플리케이션의 진입점으로 액티비티를 지정

6 애플리케이션 개념 프로세스 생명주기 전경(foreground) 프로세스: 현재 초점을 갖고 있는 프로세스. 가장 마지막에 제거됨 가시(visible) 프로세스: 촛점은 없지만 화면에 보이는 프로세스 서비스(service) 프로세스 배경(background) 프로세스: 화면에 보이지 않는 프로세스 공백(empty) 프로세스: 액티비티를 가지고 있지 않은 프로세스. 메모리가 부족할 경우 바로 제거 메모리가 부족할 경우 중요하지 않은 순서대로 프로세스를 메모리에서 제거

7 애플리케이션 개념 액티비티와 태스크 액티비티: 같은 애플리케이션 내에 존재하는 액티비티 뿐만 아니라 다른 애플리케이션 내에 존재하는 액티비티까지 호출 가능 예) 서적 관리 애플리케이션 = 서적 관리 일반 기능 + 특정 기능 (바코드 스캔) 한 애플리케이션에서 다른 애플리케이션의 컴포넌트를 거의 자유자재로 접근 가능  파일의 구성 면에서는 애플리케이션의 경계가 뚜렷, 실제로 애플리케이션의 실행 면에서는 애플리케이션간 경계가 없음 각 컴포넌트들, 특히 화면에 표시되면서 사용자와 상호작용하는 액티비티는 애플리케이션 단위보다 태스크(Task) 단위로 관리 태스크(Task): 사용자가 실질적으로 “하나의 애플리케이션처럼” 느끼는 액티비티들의 집합임.

8 애플리케이션 개념 태스크와 프로세스 태스크 프로세스 연관된 액티비티의 집합 다수의 프로세스와 APK에 걸쳐 존재 가능
커널 프로세스 기본적으로 APK는 하나의 프로세스에서 동작 하나의 APK에서 다수의 프로세스 매핑 가능 application application

9 애플리케이션 개념 액티비티 스택

10 액티비티 상태와 생명주기 개요 안드로이드는 모바일 기기에서 구동되기 때문에 데스크탑 애플리케이션에 비하여 더욱 효율적 메모리 관리가 요구 애플리케이션 컴포넌트의 중요 요소인 액티비티도 효율적인 메모리 관리를 위하여 액티비티 생성 및 소멸 과정인 생명주기가 있음 액티비티가 중지 혹은 정지 상태일 경우, 해당 프로세스가 메모리에서 제거될 수 있음. 사용자에게 다시 보여질 때 이전 상태로 복구 액티비티는 액티비티 스택(activity stack)을 통해 관리 액티비티는 사용자와 상호 작용하는 단위이며 일반적으로 전체 화면을 차지

11 액티비티 상태와 생명주기 액티비티의 3가지 상태 활성(active) 혹은 실행(running) 상태 중지(paused) 상태
전경 화면에 있을 경우 해당 액티비티가 사용자 동작에 대한 초점을 가짐 사용자와 상호 작용 가능 중지(paused) 상태 초점를 보유하지 않았지만 사용자에게 일부 보임 메모리가 극도로 부족할 경우 시스템에 의하여 강제 종료 사용자와 상호 작용 불가 정지(stopped) 상태 사용자에게 전혀 보이지 않지만 여전히 모든 상태와 멤버 정보는 유지 다른 컴포넌트가 메모리를 요청하면 시스템에 의하여 강제 종료

12 액티비티 상태와 생명주기 액티비티를 위한 메소드

13 액티비티 상태와 생명주기 액티비티를 위한 콜백 메소드 onCreate() onStart() onResume()
액티비티가 생성될 때 처음으로 호출되는 메소드 전역 상태의 모든 리소스를 초기화. 예) layout과 data binding 등 액티비티는 기본적으로 버튼, 리스트, 체크박스, 입력 표시줄 등과 같은 위젯들이 배치되어 있는 레이아웃을 구성하고, 웨젯들이 사용자와 상호작용을 하는 코드를 포함 onStart() 액티비티가 초기화 과정을 마친 후 사용자에게 보여줄 준비가 되었을 때 호출 onResume() 액티비티가 사용자에게 보여지고 사용자의 입력을 처리할 수 있음 액티비티 스택의 최상위에 위치

14 액티비티 상태와 생명주기 액티비티를 위한 콜백 메소드 onPause() onStop() onDestory()
절전 상태 혹은 새로운 액티비티가 시작될 경우 초점 상실 재개(resume)되기 전 데이터 저장, 애니메이션 중지, 프로세서를 소비하는 작업 중단 onStop() 더 이상 액티비티가 사용자에게 보이지 않음 더 이상 액티비티 스택의 최상위에 위치하지 않음 onDestory() 존재하는 모든 리소스를 해제 시스템 내에 액티비티가 존재하지 않게 됨

15 액티비티 상태와 생명주기 액티비티 상태 저장하기
일반적으로 정지된 액티비티는 사용자가 다시 사용할 것을 대비하여 메모리에 상주. 만약 메모리가 부족하게 되면 강제 종료 액티비티를 다시 호출하면, 강제 종료된 상태: 다시 액티비티를 생성한 후 액티비티를 실행 강제 종료되지 않은 상태: 액티비티를 다시 만들 필요가 없고 액티비티를 다시 시작하여 화면에 표시 액티비티가 중지되는 것은, 화면에 표시되지 않음 사용자와 상호작용 하지 않음 현재 액티비티의 상태를 Bundle 형태로 저장  사용자가 텍스트 등을 입력하다가 액티비티가 종료될 경우 작업 내용이 날아가는 것을 방지함 새로 액티비티가 시작할 경우 Bundle 객체는 null 활성 상태로 변할 때 저장된 UI 상태를 복원

16 액티비티 상태와 생명주기 액티비티 상태 저장하기 onSaveInstanceState()
onPause() 혹은 onStop() 이후 메모리가 부족할 경우 프로세스가 메모리에서 제거될 수 있음 메모리에서 제거되기 전 액티비티 상태를 저장 매개변수로 액티비티의 동적 상태를 기록할 수 있는 번들(Bundle) 오브젝트를 가짐 onRestoreInstanceState() onCreate() 혹은 onStart() 이후 저장된 액티비티 상태를 복원 onSaveInstanceState()와 onRestoreInstanceState()는 생명주기 메소드가 아니기 때문에 항상 호출되지 않음. 개발자가 해당 코드의 메소드를 재정의하여 구현 매개변수로 사용되는 savedInstanceState는 저장된 인스턴스의 상태, 즉 액티비티의 UI 상태를 의미

17 리소스 이해

18 개요 리소스란? 애플리케이션 = 기능 + 리소스 기능은 애플리케이션 실행에 관계되는 모든 알고리즘을 포함하는 코드
리소스는 애플리케이션이 사용하는 자산 텍스트 문자열, 이미지, 아이콘, 오디오, 동영상 등 레이아웃 리소스를 소스 코드와 분리시 장점 유지 보수 용이 언어와 문화권에 맞는 애플리케이션의 현지화(localization) 가능

19 개요 리소스 저장 리소스는 Java 소스 코드와 별도로 외부 파일에 저장 리소스 파일은 대부분 XML 파일로 저장
이미지와 같은 원본 자료 파일은 그 자체로 저장 모든 리소스는 ~/res 디렉토리의 하위 디렉토리에 저장되며, 하위 디렉토리 이름은 소문자+숫자+밑줄로만 구성 여기서 ~는 프로젝트의 홈 디렉토리 그래픽 및 애니메이션 파일 등 일부 리소스 파일은 파일 이름과 동일한 이름의 변수로 참조되기 때문에 Java 식별자 형태의 파일 이름으로 명명 같은 형식의 리소스는 동일한 하위 디렉토리에 저장 자동 생성되는 리소스 디렉토리: drawable, layout, values aapt(Android Asset Packaging Tool)가 리소스를 모두 파악하여 자원을 접근하기 위한 변수의 정의를 담은 ~/gen/R.java 파일을 생성

20 개요 리소스 형식과 파일 이름 리소스 형식 디렉토리 권장 파일 이름 엘리먼트 이름 문자열 values strings.xml
문자열 배열 arrays.xml <string-array> 색상 값 colors.xml <color> 크기 dimens.xml <dimen> 단순 표시 drawables.xml <drawable> 스타일 및 테마 styles.xml, themes.xml <style> 그래픽 drawable 애니메이션 anim <set>, <alpha>, <scale> 등 메뉴 menu <menu> XML xml 원본 raw 레이아웃 layout

21 리소스 접근 코드에서 문자열 참조 R.java 파일에 정의된 R 클래스와 하위 클래스를 이용
예) hello라는 문자열을 접근하려면 getResource(): 리소스를 대표하는 Resources 객체를 반환 getString(): 인수로 주어진 리소스 식별자에 해당하는 문자열의 실제 값을 반환 R.string.hello는 R 클래스의 하위 클래스 string에 있는 멤버 변수 hello을 참조 String myString = getResources().getString(R.string.hello); <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, Android!</string> <string name="app_name">Android</string> </resources>

22 리소스 접근 코드에서 문자열 배열 참조 문자열 배열 fruits의 접근
문자열 배열 리소스 파일(~/res/values/arrays.xml) String[] fruits = getResources().getStringArray(R.array.fruits); <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name=“fruits"> <item>apple</item> <item>banana</item> </string-array> <string-array name=“animal“> <item>tiger</item> <item>lion</item> </resources>

23 리소스 접근 코드에서 색상 참조 문자열 배열 textColor의 접근
색상 리소스 파일(~/res/values/colors.xml) int myColor = getResources().getColor(R.color.textColor); <?xml version="1.0" encoding="utf-8"?> <resources> <color name=“backgroundColor">#006600</color> <color name=“textColor">#ffeecc</color> </resources>

24 리소스 접근 코드에서 크기 참조 텍스트 크기 참조를 위한 textPointSize의 접근
리소스 파일(~/res/values/dimens.xml) float myTextSize = getResources().getDimension(R.dimen.textPointSize); <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name=“smallSize">6pt</dimen> <dimen name=“textPointSize“>11pt</dimen> <dimen name=“largeSize">20pt</dimen> </resources>

25 리소스 접근 코드에서 레이아웃 참조 레이아웃 내부에 정의된 ImageView01의 접근
레이아웃 파일(~/res/layout/main.xml) ImageView iv = (ImageView)findViewById(R.id.ImageView01); <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff"> <ImageView android:layout_width="fill_parent“ </LibearLayout>

26 리소스 접근 코드에서 이미지 참조 ~/res/drawable 디렉토리에 추가한 flag.png 파일 접근
레이아웃 파일(~/res/layout/main.xml) ImageView iv = (ImageView)findViewById(R.id.ImageView01); iv.setImageResource(R.drawable.flag) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffffff"> <ImageView android:layout_width="fill_parent“ </LibearLayout>

27 리소스 접근 리소스에서 리소스 참조 참조 방법 예) 애플리케이션 이름을 hello 문자열과 동일하게 하는 경우: strings.xml을 수정 @[패키지이름:]리소스형식/리소스이름 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, ColorSize!</string> <string </resources>

28 리소스 접근 시스템 리소스 참조 android.R의 하위 클래스에는 다양한 시스템 리소스 보유 참조 방법 표준 시스템 색상
시스템 스타일과 테마 애플리케이션 프로그램 섬네일(thumbnail) 이미지와 아이콘 오류 문자열과 표준 버튼 텍스트 페이드인/아웃을 위한 애니메이션 시퀀스 참조 방법 코드에서 참조: R 대신 android.R 리소스에서 참조: 패키지 이름으로 android 사용

29 리소스 접근 선택적 리소스 애플리케이션의 현지화 가능 선택적 리소스를 위한 수식어 리소스와 참조
리소스: MyApp/res/drawable-mdpi/myImage.png 코드: R.drawable.myImage 수식어 내용 언어 kr(한글), en(영어), fr(불어) 등 화면 크기 small, normal, large 화면 방향 port(세로), land(가로) 화면 픽셀 밀도 ldpi(120dpi), mdpi(160dpi), hdpi(240dpi)


Download ppt "액티비티와 리소스."

Similar presentations


Ads by Google