SlideShare a Scribd company logo
1 of 36
안드로이드 응용프로그램의 구조,[object Object],CHAPTER 04,[object Object]
목  차,[object Object],안드로이드 응용프로그램의 수명 주기,[object Object],액티비티를 통한 태스크 수행,[object Object],인텐트를 통한 액티비티 전환,[object Object],클래스 이름으로 새 액티비티 띄우기,[object Object],액션과 데이터로 인텐트 만들기,[object Object],인텐트를 통한 추가 정보 전달,[object Object],메뉴를 이용한 응용프로그램 액티비티들과 인텐트들의 조직화,[object Object],서비스와 브로드캐스팅 수신자 다루기,[object Object],안드로이드 액티비티의 수명 주기,[object Object],액티비티 콜백을 이용한 응용프로그램 상태 및 자원 관리,[object Object],액티비티의 정적 자료의 초기화에 적합한 onCreate(),[object Object],액티비티 데이터의 초기화 및 준비에 적합한 onResume(),[object Object],액티비티 자료의 중지, 저장, 해제에 적합한 onPause(),[object Object],Activity 객체가 죽지 않게 하려면,[object Object],액티비티의 필수적이지 않은 상태를 onSaveInstanceState()에서 Bundle에 저장,[object Object],액티비티의 정적 자료 파괴에 적합한 onDestroy(),[object Object],액티비티 전이 관리,[object Object],안드로이드 매니페스트 파일을 이용한 응용프로그램 정의,[object Object],응용프로그램의 신원 관리,[object Object],응용프로그램의 버전 설정,[object Object],응용프로그램의 이름과 아이콘,[object Object],액티비티를 비롯한 응용프로그램 구성요소 등록,[object Object],인텐트 필터를 이용해서 한 액티비티를 응용프로그램의 주 진입점으로 지정하기,[object Object],그 외의 인텐트 필터 설정,[object Object],서비스와 브로드캐스팅 수신자 등록,[object Object],콘텐트 제공자 등록,[object Object],권한 다루기,[object Object],응용프로그램에 필요한 권한 등록,[object Object],응용프로그램이 다른 응용프로그램에게 허락하는 권한들을 등록,[object Object],입력에 관한 하드웨어/소프트웨어 요구사항 지정,[object Object],라이브러리와 안드로이드 SDK 버전 다루기,[object Object],그 외의 응용프로그램 구성 설정들,[object Object]
안드로이드 응용프로그램의 수명 주기,[object Object],안드로이드 응용프로그램 개발에 쓰이는 용어들을 소개,[object Object],안드로이드 응용프로그램의 전반적인 작동 방식,[object Object],다른 안드로이드 응용프로그램과의 연동 방식,[object Object]
액티비티를 통한 태스크 수행,[object Object],하나의 액티비티은 응용프로그램이 수행하는 고유한 하나의 태스크 또는 작업을 뜻한다.,[object Object],안드로이드에서 액티비티는 Activity 클래스(android.app.Activity)로 대표된다.,[object Object],응용프로그램의 화면마다 액티비티를 정의하고 구현하는 데 많은 시간을 들이게 된다.,[object Object],간단한 게임 프로그램을 구성하는 다섯 개의 액티비티,[object Object],시동 화면,[object Object],응용프로그램의 주 진입점 역할을 한다. 구체적으로, 잠시 동안 응용프로그램의 이름과 버전 정보를 표시한 후 응용프로그램의 주 메뉴로 들어간다.,[object Object],주 메뉴 화면,[object Object],사용자가 응용프로그램의 핵심 액티비티들 중 하나를 선택할 수 있게 한다.,[object Object],게임 플레이 화면,[object Object],실제 게임 플레이가 벌어지는 화면에 해당한다.,[object Object],고득점 화면,[object Object],게임 고득점들을 표시한다.,[object Object],도움말/프로그램 정보 화면,[object Object],사용자가 게임을 플레이하기 위해 알아야 할,[object Object],정보를 표시한다.,[object Object],액티비티,[object Object],액티비티,[object Object],액티비티,[object Object],액티비티,[object Object],액티비티,[object Object]
인텐트를 통한 액티비티 전환,[object Object],하나의 인텐트는 “이것”(Uri가 나타내는, 액션의 대상)에게 “이 일”(Action, 액션)을 하고자 한다는 의도(Intent, 인텐트)를 나타낸다.,[object Object],하나의 안드로이드 응용프로그램에 여러 개의 진입점들이 존재할 수 있다.,[object Object],안드로이드 응용프로그램에서는 여러 액티비티들 중 응용프로그램 시동시 기본으로 실행될 주 액티비티(main activity)을 설정할 수 있다.,[object Object],이 설정은 AndroidManifest.xml 파일에서 한다,[object Object],특정 액티비티가 특정 조건에서 시동되게 설정하는 것도 가능하다.,[object Object],예를 들어 음악 응용프로그램이라면 응용프로그램 메뉴에서 실행할 범용적인 액티비티뿐만 아니라, 재생 목록 ID에 따라 특정 재생 목록에 접근한다거나 이름에 따라 특정 아티스트에 접근하는 등의 특별한 진입점 액티비티들을 둘 수 있다.,[object Object]
클래스 이름으로 새 액티비티 띄우기,[object Object],응용프로그램의 Context 객체에 대해 startActivity() 메서드를 호출,[object Object],이 메서드는 인텐트형식의 매개변수 하나를 받는다.,[object Object],다음의 코드는 명시적인 Intent 객체로 startActivity()를 호출한다.,[object Object],startActivity(new Intent(getApplicationContext(), MyDrawActivity.class));,[object Object],이 Intent 객체는 MyDrawActivity라는 액티비티클래스에 해당하는 액티비티을 요청한다.,[object Object],그냥 현재 액티비티에서 다른 어떤 액티비티으로 넘어가는(이를 전이[transition]라고 한다) 정도라면 이처럼 간단한 코드로 충분하다.,[object Object],“인텐트” 메커니즘을 훨씬 더 견고한 방식으로 사용할 수도 있다. 예를 들어 Intent 객체를 통해서 액티비티들이 자료를 주고받게 할 수도 있다.,[object Object]
액션과 데이터로 인텐트 만들기,[object Object],인텐트 필터(intent filter)를 이용 특정 조건에따라 액티비티를 선택하게 하는 방식도 가능하다.,[object Object],Intent 객체는 크게 두 부분으로 구성된다.,[object Object],수행할 액션,[object Object],그 작용에 쓰이는 데이터,[object Object],Intent 클래스에는 여러 종류의 액션들이 정의되어 있다,[object Object],ACTION_MAIN,[object Object],한 Activity의 주 진입점을 지정하는 데 쓰인다,[object Object],ACTION_EDIT,[object Object],자료의 편집에 쓰인다. 편집할 자료는 Uri로 지정한다,[object Object],그 외에도, 브라우저나 전화 걸기(Dialer)같은 다른 응용프로그램에 속한 액티비티들과의 통합 지점을 생성하는 등의 다양한 액션들이 존재한다.,[object Object]
다른 응용프로그램에 속한 액티비티 띄우기,[object Object],적절한 권한이 있다면 다른 응용프로그램에 있는 외부 액티비티들을 띄우는 것이 가능하다.,[object Object],예 ) 고객 관리(CRM) 응용프로그램이라면 연락처 응용프로그램(Contacts)의 액티비티들을 이용해서 연락처 데이터베이스를 조회하고, 특정 연락처를 선택하고, 그 연락처의 고유 식별자를 가져오는 등의 작업을 할 수 있다.,[object Object],외부 액티비티를 시동하는 간단한 인텐트객체를 만드는 방법을 보여주는 코드,[object Object],Uri number = Uri.parse(tel:5555551212);,[object Object],Intent dial = new Intent(Intent.ACTION_DIAL, number);,[object Object],startActivity(dial);,[object Object],흔히 쓰이는 안드로이드 Google 응용프로그램에 관한 여러 액션 종류들과 관련 URI 형식 정리,[object Object],http://d.android.com/guide/appendix/g-app-intents.html,[object Object],개발자들이 직접 참여해서 만드는 인텐트 프로토콜 목록 사이트,[object Object],http://www.openintents.org/en/intentstable,[object Object]
인텐트를 통한 추가 정보 전달,[object Object],Intent 객체에 추가적인 자료를 포함시키는 것도 가능,[object Object],Intent 객체의 Extras 멤버는 Bundle 형식의 객체를 담는다.,[object Object],Intent 클래스는 그 Bundle 객체에 이름/값 쌍을 저장하거나 조회하기 위한 편의용 메서드들도 제공한다.,[object Object],다음은 Intent 객체에 string 값 하나와 boolean값 하나를 추가하는 예이다.,[object Object],Intent intent = new Intent(this, MyActivity.class);,[object Object],intent.putExtra("SomeStringData","Foo");,[object Object],intent.putExtra("SomeBooleanData",false);,[object Object]
메뉴를 이용한 응용프로그램액티비티들과 인텐트들의 조직화,[object Object],주 메뉴(main menu),[object Object],일종의 스위치처럼 작동,[object Object],각 메뉴 항목은 응용프로그램의 각 액티비티을 띄운다,[object Object],예) “게임 플레이” 액티비티를 위한 메뉴 항목, “고득점” 액티비티를 위한 항목, “도움말” 액티비티를 위한 항목 등.,[object Object],드릴다운(drill-down, 펼침 메뉴),[object Object],일종의 디렉터리처럼 작동,[object Object],하나의 메뉴 항목은 하나의 액티비티에 해당하나, 펼쳐서 나오는 하위항목마다 각자 다른 데이터가 인텐트를 통해서 액티비티에 전달된다.,[object Object],예) 데이터베이스 레코드에 대한 드릴다운 메뉴에서 특정 항목을 선택하면 “레코드 편집” 액티비티가 실행되되, 그 액티비티에게 해당 항목의 ID가 전달되는 식이다.,[object Object]
서비스와 브로드캐스팅 수신자 다루기,[object Object],서비스 (Service),[object Object],안드로이드에서 서비스는 사용자 인터페이스가 없는 액티비티,[object Object],백그라운드 프로세스로 실행,[object Object],서드파티의 요청들을 처리하는 웹 서버와 아주 비슷한 방식,[object Object],인텐트를 통해서 실행,[object Object],관련 메서드 :startService(),bindService(),[object Object],안드로이드 응용프로그램이 제공하는 서비스들은 반드시 안드로이드 매니페스트 파일에 등록되어야 한다.,[object Object],브로드캐스팅 (broadcasting, 브로드캐스팅),[object Object],안드로이드 시스템 전체에 특정 메시지를 브로드캐스팅하는 용도로 Intent 객체를 사용,[object Object],해당 메시지에 관심이 있음을 표명했던 응용프로그램들 모두에게 그 메시지가 전달된다,[object Object],이 때 브로드캐스팅 수신자를 뜻하는 BroadcastReceiver객체가 쓰인다.,[object Object],한 프로그램이 브로드캐스팅의 송신과 수신을 모두 수행하는 것도 가능,[object Object],일반적으로 이런 종류의 Intent 객체는 좀 더 넓은 범위의 대상들에게 특정 사건을 알리는 용도로 쓰인다.,[object Object],Intent에는 이런 용도를 위한 여러 작용 종류들이 정의되어 있다.,[object Object],배터리 수준이 낮아지면 Intent.ACTION_BATTERY_LOW액션이 지정된 Intent 객체가 브로드캐스팅된다.,[object Object],배터리/충전 수준의 변화에 반응할 필요가 있다면, 액션이 ACTION_BATTERY_CHANGED인 Intent 객체의 브로드캐스팅을 들어야 한다.,[object Object],그 외에도 SD 카드의 상태 변화라던가 응용프로그램 설치, 제거, 바탕화면 변화 같은 여러 시스템 사건들에 대한 브로드캐스팅용 Intent 객체들이 있다.,[object Object]
안드로이드 액티비티의 수명 주기,[object Object],주어진 한 시점에서 단 하나의 응용프로그램 액티비티만이 포어그라운드에서 실행 됨,[object Object],안드로이드 운영체제는 현재 실행 중인 모든 Activity 객체들을 액티비티 스택(activity stack)이라는 자료구조에 담아서 관리한다.,[object Object],새 액티비티가 시작되면,[object Object],스택 제일 위에 있던 Activity 객체(현재 포어그라운드 액티비티에 해당)가 정지되고(paused),[object Object],새 액티비티에 해당하는 Activity 객체가 스택 제일 위에 추가된다.,[object Object],그 액티비티가 끝나면 해당 Activity 객체가 스택에서 제거되고,[object Object],이전의 Activity 객체가 실행을 재개한다.,[object Object],안드로이드 응용프로그램들은 자신의 메모리, 자원, 데이터뿐만 아니라 자신의 상태도 관리해야 한다.,[object Object],특히 안드로이드 응용프로그램은 매끄럽게 정지, 재개할 수 있어야 한다.,[object Object],* 수명 주기(life cycle) : 한 액티비티가 생성되고 소멸되기까지의 일생,[object Object]
액티비티 콜백을 이용한응용프로그램 상태 및 자원 관리,[object Object],액티비티 시작이,[object Object],요청됨,[object Object],onCreate(),[object Object],OnStart(),[object Object],onRestart(),[object Object],액티비티가 포어그라운드가 됨,[object Object],액티비티가,[object Object],백그라운드로 감,[object Object],onResume(),[object Object],액티비티가 포어그라운드에서,[object Object],실행됨,[object Object],메모리에서,[object Object],액티비티가,[object Object],삭제됨,[object Object],액티비티가,[object Object],포어그라운드에서 실행됨,[object Object],액티비티가,[object Object],포어그라운드가 됨,[object Object],액티비티가 백그라운드로 감,[object Object],onPause(),[object Object],onStop(),[object Object],onDestroy(),[object Object]
액티비티의 정적 자료의 초기화에 적합한 onCreate(),[object Object],하나의 액티비티가 처음 시작되면 해당 Activity 객체의 onCreate() 메서드가 호출된다.,[object Object],onCreate() 메서드는 Bundle 객체 하나를 매개변수로 받는다.,[object Object],새로 시작된 Activity의 경우에는 널(null)이 전달된다.,[object Object],주어진 액티비티가 메모리상의 이유로 삭제되었다가 다시 시작된 것이라면 이 Bundle 객체에는 해당 액티비티의 이전 상태 정보가 들어 있게 된다.,[object Object],따라서 액티비티는 그 정보를 이용해서 이전 상태를 복원할 수 있다.,[object Object],흔히 onCreate() 메서드에서는 레이아웃과 데이터 바인딩(data binding) 같은 초기 설정 작업(이를테면 setContentView() 메서드 호출 등)을 수행한다.,[object Object]
액티비티 데이터의 초기화 및 준비에 적합한 onResume(),[object Object],한 액티비티가 액티비티 스택의 제일 위에 놓이고 액티비티 프로세스가 되면 onResume() 메서드가 호출된다.,[object Object],액티비티의 실행에 필요한 자원들(독점 자원이든 공유 자원이든)을 준비하기에 가장 적합,[object Object],액티비티가 포어그라운드에 있을 때에만 자원들을 유지,[object Object],자원들을 유지하는 데에는 비용이 많이 들기 때문에,[object Object]
액티비티 자료의 중지, 저장, 해제에 적합한 onPause(),[object Object],다른 액티비티에 의해 액티비티 스택 최상단에서 백그라운드로 밀려나게 될 때 밀려나는 액티비티의 onPause() 메서드가 호출된다.,[object Object],중단,[object Object],이 메서드에서 액티비티는 onResume() 메서드에서 재생을 시작한 오디오나 동영상, 애니메이션을 중단해야 한다.,[object Object],데이터베이스의 커서(Cursor 객체) 같은 자원들도 비활성화해야 한다(자원들을 직접 관리하는 경우).,[object Object],해제,[object Object],onPause() 메서드는 액티비티가 백그라운드에 있는 동안 필요하지 않은 자원들을 해제할 마지막 기회이기도하다.,[object Object],이 시점 이후에 응용프로그램의 실행이 재개되지 않을 수도 있으므로, 여기서 중요한 자료를 저장하거나 마무리할 필요가 있다.,[object Object],저장,[object Object],사용자가 한 필드를 입력하는 즉시 데이터를 저장하는 것이 가능하다.,[object Object],이렇게 하면 사용자 인터페이스와 onPause() 메서드가 간단해진다.,[object Object],취소를 위한 버튼은 제공해야 하지만, 저장을 위한 버튼은 생략할 수 있다.,[object Object]
Activity 객체가 죽지 않게 하려면,[object Object],메모리가 모자라는 상황이 되면, 정지 또는 중지(stop) 또는 파괴된 액티비티의 프로세스를 안드로이드 운영체제가 죽일(kill) 수 있다.,[object Object],포어그라운드에서 실행 중인 액티비티가 강제로 죽는 일은 없다.,[object Object],onPause() 호출 이후에 액티비티가 죽으면 onStop()과 onDestroy() 메서드가 호출되지 않을 수도 있다.,[object Object],onPause()에서 자원을 많이 해제할수록 액티비티가 배경에서 죽을 가능성이 줄어든다.,[object Object],액티비티가 죽어도 액티비티 스택에서 제거되지는 않는다.,[object Object],대신 해당 Activity 객체의 상태가 하나의 Bundle 객체에 저장된다(해당 Activity가 커스텀 자료에 맞게 onSaveInstanceState()를 구현, 사용한다고 할 때).,[object Object],또한 일부 뷰(View) 자료는 자동으로 저장된다.,[object Object],사용자가 이후에 다시 그 액티비티를 활성화하면 onCreate() 메서드가 호출되는데, 이 때 이전에 저장해 두었던 Bundle 객체가 매개변수로 주어진다.,[object Object]
액티비티의 필수적이지 않은 상태를 onSaveInstanceState()에서 Bundle에 저장,[object Object],메모리가 부족해서 운영체제가 액티비티를 죽이는 경우가 많다면, onSaveInstanceState() 메서드 콜백시 Bundle 객체에 상태 정보를 저장하는 것도 한 가지 방법이 된다.,[object Object],그러나 응용프로그램의 실행에 필수적인 자료들은 onPause() 메서드에서 저장하는 것이 안전하다.,[object Object],onSaveInstanceState() 메서드는 아직 제출되지 않은 필드 자료라던가 사용자에 대한 응용프로그램의 반응성을 높이기 위한 상태 정보 등 필수적이지 않은 정보를 저장하는 곳으로 적합하다.,[object Object],이후 사용자가 해당 액티비티를 다시 활성화하면 그 Bundle이 onCreate() 메서드로 전달된다.,[object Object],이를 이용해서 액티비티는 일시정지 전의 상태를 정확히 복원할 수 있다.,[object Object],onStart() 콜백 메서드 이후에 onRestoreInstanceState() 콜백을 이용해서 이 Bundle의 정보를 읽는 것도 가능하다.,[object Object]
액티비티의 정적 자료 파괴에 적합한 onDestroy(),[object Object],액티비티가 파괴되기 직전에 onDestroy() 메서드가 호출된다. ,[object Object],onDestroy() 메서드가 호출되는 이유는 두 가지이다.,[object Object],액티비티가 자발적으로 자신의 수명을 끝내려 하기 때문,[object Object],자원 부족 때문에 안드로이드가 액티비티를 죽이려 하기 때문,[object Object],안드로이드 운영체제가 액티비티를 죽인 경우 해당 Activity의 isFinishing() 메서드가 false를 돌려준다.,[object Object],이 메서드를 onPause() 메서드에서 사용할 수도 있으나, 그 시점에서 이 메서드가 true를 돌려준다고 해도 이후에 onStop()에서 액티비티가 죽을 수 있음을 주의해야 한다.,[object Object]
액티비티 전이 관리,[object Object],한 액티비티에서 다른 액티비티로 넘어가는 것을 액티비티의 전이(transition)라고 부른다.,[object Object],때에 따라서는 액티비티 스택에 여러 개의 Activity 객체들이 존재하는 상황도 발생한다. 개발자는 그러한 액티비티 전이에 따른 액티비티의 수명 주기에 주의를 기울일 필요가 있다.,[object Object],영구적인 액티비티 전이,[object Object],스플래시 화면에서 주 메뉴로의 전이,[object Object],응용프로그램 스플래시/시동 화면 액티비티는 일단 주 메뉴 액티비티가 포어그라운드를 차지하고 나면 완전히 폐기된다. ,[object Object],이런 전이에는 startActivity() 메서드와 적절한 finish() 메서드를 사용한다.,[object Object],일시적인 액티비티 전이,[object Object],자식 액티비티가 대화상자를 표시한 후 원래(부모)의 액티비티로 돌아가는 것,[object Object],원래의 액티비티는 액티비티 스택에서 정지 상태에 있다가 다시 재개된다.,[object Object],이런 전이에는 startActivityForResult() 메서드와 onActivityResult() 메서드를 사용한다.,[object Object]
안드로이드 매니페스트 파일을 이용한응용프로그램 정의,[object Object],AndroidManifest.xml,[object Object],안드로이드 응용프로그램마다 하나씩 존재해야 하는, 특정한 형태의XML 파일,[object Object],이 파일은 응용프로그램의 신원(identity)에 대한 중요한 정보를 담는다. ,[object Object],응용프로그램의 이름과 버전 정보, 응용프로그램의 구성요소들, 응용프로그램의 실행에 필요한 권한들과 그 외의 응용프로그램 구성 정보,[object Object],이 매니페스트 파일은 안드로이드 프로젝트의 최상위에 놓인다,[object Object],Eclipse 파일 편집창에서 안드로이드 매니페스트 파일을 연 모습.,[object Object],안드로이드 매니페스트 파일의 XML을 직접 수정.,[object Object]
안드로이드 매니페스트 파일을 이용한응용프로그램 정의,[object Object],안드로이드 매니페스트 파일들은 대부분 루트 요소가 <manifest>이고 그 안에 <application> 요소가 하나 존재한다.,[object Object],다음은 Multimedia라는 응용프로그램의 AndroidManifest.xml 파일이다.,[object Object],<?xml version="1.0" encoding="utf-8"?>,[object Object],<manifest,[object Object],xmlns:android="http://schemas.android.com/apk/res/android",[object Object],package="com.androidbook.multimedia",[object Object],android:versionCode="1",[object Object],android:versionName="1.0.0">,[object Object],<application,[object Object],android:icon="@drawable/icon",[object Object],android:label="@string/app_name",[object Object],android:debuggable="true">,[object Object],<activity,[object Object],android:name=".MainMenuActivity",[object Object],android:label="@string/app_name">,[object Object],<intent-filter>,[object Object],<action android:name="android.intent.action.MAIN" />,[object Object],<category,[object Object],android:name="android.intent.category.LAUNCHER"/>,[object Object],</intent-filter>,[object Object],</activity>,[object Object],<activity android:name="AudioActivity" />,[object Object],<activity android:name="MovingActivity" />,[object Object],<activity android:name="StillActivity" />,[object Object],</application>,[object Object],<uses-permission android:name="android.permission.RECORD_AUDIO" />,[object Object],<uses-permission android:name="android.permission.SET_WALLPAPER"/>,[object Object],<uses-permission android:name="android.permission.CAMERA"/>,[object Object],<uses-permission android:name="android.permission.WRITE_SETTINGS"/>,[object Object],</manifest>,[object Object]
응용프로그램의 신원 관리,[object Object],응용프로그램의 패키지 이름을 <manifest> 요소의 package 특성(attribute)으로 정의해야 한다.,[object Object],<manifest,[object Object],xmlns:android="http://schemas.android.com/apk/res/android",[object Object],package="com.androidbook.multimedia",[object Object],android:versionCode="1",[object Object],android:versionName="1.0.0">,[object Object]
응용프로그램의 버전 설정,[object Object],개요,[object Object],응용프로그램을 효과적으로 관리하기 위해서는 응용프로그램에 버전을 적절히 부여하는 것이 꼭 필요하다. 버전을 체계적으로 부여하면 혼동이 줄어들고 제품 지원과 업그레이드도 간단해진다.,[object Object],<manifest> 요소에는 버전에 대한 특성,[object Object],버전 이름(android:versionName특성),[object Object],사용자 친화적인, 개발자가 정의하는 버전 이름,[object Object],버전 부호(android:versionCode특성),[object Object],안드로이드 운영체제가 응용프로그램 업그레이드를 관리하기 위해 사용하는 번호이다.,[object Object]
응용프로그램의 이름과 아이콘,[object Object],<application>의요소,[object Object],android:icon : 응용프로그램 아이콘,[object Object],android:label : 응용프로그램의 사용자 친화적 제목,[object Object],<application android:icon="@drawable/icon",[object Object],android:label="@string/app_name">,[object Object],커스텀 아이콘을 부여하는 법,[object Object],48×48픽셀 크기의 PNG 파일을 만듬,[object Object],Drawable자원으로서 응용프로그램에 추가,[object Object],android:icon특성에 그 아이콘 자원을 지정,[object Object]
액티비티를 비롯한 응용프로그램 구성요소 등록,[object Object],응용프로그램의 모든 액티비티를 각각 하나의 <activity> 요소로 안드로이드 매니페스트 파일에 등록해야 한다.,[object Object],다음은 AudioActivity라는 Activity 클래스를 정의하는 <activity> 요소이다.,[object Object],<activity android:name="AudioActivity" />,[object Object],이 클래스는 com.androidbook.multimedia패키지 안에 정의되어 있을 것이다.,[object Object],액티비티마다 반드시 <activity> 요소를 정의해야 한다. 그렇지 않으면 그 액티비티는 실행되지 않는다.,[object Object]
인텐트 필터를 이용해서 한 액티비티를응용프로그램의 주 진입점으로 지정하기,[object Object],<intent-filter>,[object Object],<activity> 요소에 인텐트 필터(intent filter)를 정의,[object Object],이 요소에서 액션 종류를 MAIN으로, 액션 범주를 LAUNCHER로 설정하면 현재 <activity> 요소가 정의하는 액티비티가 응용프로그램의 주 진입점이 된다.,[object Object],<activity,[object Object],android:name=".MainMenuActivity",[object Object],android:label="@string/app_name">,[object Object],<intent-filter>,[object Object],<action android:name="android.intent.action.MAIN" />,[object Object],<category android:name="android.intent.category.LAUNCHER"/>,[object Object],</intent-filter>,[object Object],</activity>,[object Object]
그 외의 인텐트 필터 설정,[object Object],“암묵적”인텐트,[object Object],특정 액티비티가나 구성요소를 지정하지 않는 것,[object Object],운영체제는 그런 암묵적 인텐트들의 처리를 인텐트 필터에 기초해서 결정,[object Object],인텐트 필터는 액티비티와 서비스들, 브로드캐스팅 수신자들에 적용된다.,[object Object],인텐트 필터는 안드로이드 운영체제가 보낸 인텐트들 중 해당 구성요소가 받아들이는 것이 어떤 것인지를 정의한다.,[object Object],<intent-filter>,[object Object],적어도 하나의 <action> 요소가 반드시 있어야 한다.,[object Object],추가적으로 <category> 요소와 <data> 요소가 있을 수 있다.,[object Object],<intent-filter>,[object Object],<action android:name="android.intent.action.VIEW" />,[object Object],<category android:name="android.intent.category.BROWSABLE" />,[object Object],<category android:name="android.intent.category.DEFAULT" />,[object Object],<data android:scheme="geoname"/>,[object Object],</intent-filter>,[object Object],이 인텐트 필터는 VIEW라는 미리 정의된 액션을 사용한다.,[object Object],이 액션은 특정 콘텐트의 내용을 표시하는 기능을 한다.,[object Object],이 필터는 BROWSABLE이라는 범주에 속하며 “geoname”이라는 자료 스킴을 사용한다.,[object Object],geoname://로 시작하는 Uri를 가진 인텐트가 전달되면 이 인텐트 필터를 가진 액티비티이 시동된다.,[object Object],하나의 액티비티로 여러 가지 일을 할 수도 있다.,[object Object],그런 경우 별칭(<activity-alias> 요소)을 이용해서 여러 인텐트 필터들과 기타 메타자료들을 적절한 그룹들로 묶음,[object Object]
서비스와 브로드캐스팅 수신자 등록,[object Object],응용프로그램의 서비스들과 브로드캐스팅 수신자들도 안드로이드 매니페스트 파일에 등록해 두어야 한다.,[object Object],서비스 :<service>,[object Object],브로드캐스팅 수신자 :<receiver>,[object Object],서비스와 브로드캐스팅 수신자 모두 인텐트 필터를 사용할 수 있다.,[object Object]
콘텐트 제공자 등록,[object Object],응용프로그램이 콘텐트 제공자로 작용한다면, 그 사실을 운영체제에게 알려주어야 한다.,[object Object],<provider> 요소를 적절히 설정해야 한다.,[object Object],콘텐트 제공자 설정에는 공유하고자 하는 자료의 부분집합 지정, 그 자료에 접근하는 데 필요한 권한 등이 포함된다.,[object Object],* 콘텐트 제공자 : 다른 응용프로그램들이 사용할 공유 자료 서비스를 제공하는역할,[object Object]
권한 다루기,[object Object],안드로이드 운영체제는 응용프로그램이 자신의 프로세스 공간 바깥의 액션들에는 악영향을 미칠 수 없도록 하기 위해 응용프로그램의 능력을 적절히 제한한다.,[object Object],안드로이드 응용프로그램은 자신만의 가상 기계의 테두리 안에서, 자신만의 리눅스 사용자 계정(그리고 관련 권한들) 하에서 작동한다.,[object Object]
응용프로그램에 필요한 권한 등록,[object Object],안드로이드 응용프로그램에는 어떠한 권한도 기본적으로 부여되지 않는다.,[object Object],응용프로그램이 어떤 공유 자원이나 특정 기능(연락처 DB, 내장 카메라 등)을 사용하는 방법,[object Object],해당 접근 권한들을 안드로이드 매니페스트 파일에 명시,[object Object],그 권한들은 응용프로그램 설치 시에 응용프로그램에 부여된다.,[object Object],사용자가 그것들을 허락해야만 설치가 진행된다.,[object Object],<uses-permission> ,[object Object],안드로이드 매니페스트 파일에서 권한 설정을 위한 요소,[object Object],<uses-permission android:name="android.permission.CAMERA" />,[object Object],Multimedia 응용프로그램의 안드로이드 매니페스트 파일 중 내장 카메라에 대한 접근을 요청,[object Object],요청 가능한 권한들은 모두 android.Manifest.permission클래스에 정의되어 있다.,[object Object]
응용프로그램이 다른 응용프로그램에게허락하는 권한들을 등록,[object Object],<permission> ,[object Object],안드로이드 매니페스트 파일에서 <permission> 요소를 이용해서 응용프로그램 자신만의 권한을 등록하는 것도 가능하다.,[object Object],android:permission특성으로 특정 구성요소(활동, 서비스 등)의권한을 지정해 두면, 다른 응용프로그램들은 해당 권한이 있어야만 그 구성요소에 접근할 수 있게 된다.,[object Object],권한들은 다음과 같은 여러 지점들에서 시행(점검 및 적용)된다.,[object Object],활동이나 서비스를 시작할 때,[object Object],콘텐트 제공자가 제공하는 자료에 접근할 때,[object Object],함수 호출 수준에서,[object Object],Intent 객체로 방송을 보내거나 받을 때,[object Object],권한의 기본적인 보호 수준,[object Object],보통(normal),[object Object],응용프로그램 안에서 권한들을 세밀하게 시행할 때 좋은 기본값이다.,[object Object],위험(dangerous),[object Object],기기에 해를 입힐 수도 있는 위험한 활동들에 쓰인다.,[object Object],서명(signature) ,[object Object],응용프로그램 자신의 것과 동일한 인증서로 서명된 응용프로그램들이 해당 구성요소에 자유로이 접근할 수 있게 하는 것으로, 통제된 응용프로그램들의 연동을 위한 것이다.,[object Object],비슷한 권한들은 “권한 그룹”이라는 것으로 묶인다.,[object Object],android:permissionGroup특성으로 그 권한이 속할 권한 그룹을 지정할 수 있다.,[object Object],Uri 수준에서 콘텐트 제공자 권한을 시행,[object Object],<grant-uri-permissions> 요소를 이용하면 Uri 수준에서 권한들을 세밀하게 시행할 수 있다.,[object Object]
입력에 관한 하드웨어/소프트웨어 요구사항 지정,[object Object],<uses-configuration> 요소가 지원하는 여러 구성 특성들,[object Object]
라이브러리와 안드로이드 SDK 버전 다루기,[object Object],최소 안드로이드 SDK 버전 지정,[object Object],기본적으로 안드로이드 응용프로그램은 안드로이드 SDK의 풀 버전들 모두와 호환된다고 가정된다.,[object Object],특정 버전의 안드로이드 SDK가 꼭 필요한 응용프로그램이라면 그러한 사실을 <manifest> 요소,[object Object],안에서 <uses-sdk> 요소로 명시해야 한다.,[object Object],최소 버전 지정 : <uses-sdk> 요소의 android:minSdkVersion이라는 특성에 해당하는 SDK의 API 수준 번호를 지정,[object Object],예1) 안드로이드 SDK 1.1(릴리스 1) :API 수준 2,[object Object],<uses-sdkandroid:minSdkVersion="2" />,[object Object],예2) 안드로이드 SDK 1.5 : API 수준 3,[object Object],<uses-sdkandroid:minSdkVersion="3" />,[object Object],응용프로그램을 안드로이드 마켓에 발행하기 위해 꼭 필요,[object Object],다른 패키지 링크,[object Object],모든 안드로이드 응용프로그램은 기본적으로 표준 안드로이드 패키지들(android.app 등)에 링크 되고, 자신의 패키지를 인식한다.,[object Object],응용프로그램을 다른 추가적인 패키지들과 링크하려면,[object Object],<application> 요소 안에 <uses-library> 요소로 등록,[object Object],<uses-library android:name="com.mylibrary.stuff" />,[object Object]
그 외의 응용프로그램 구성 설정들,[object Object],<application> 요소의 여러 특성들을 통해서 응용프로그램 전역 테마들을 설정,[object Object],<instrumentation> 요소를 통해서 응용프로그램의 계장(計裝, instrumentation) 속성들을 설정할 수 있다.,[object Object],안드로이드 문서 참고,[object Object],* 계장 : 소프트웨어 개발에서 말하는 계장은 검사나 계측, 진단 등을 위해서 특정한 코드를 응용프로그램에 암묵적으로 삽입하는 것을 말한다. 구체적인 내용은 안드로이드 SDK의 문서화를 참고하기 바란다.,[object Object]

More Related Content

What's hot

Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지NAVER Engineering
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GDG Korea
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2YoungSu Son
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴 YoungSu Son
 
엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612Yong Joon Moon
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기YoungSu Son
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Leonardo YongUk Kim
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
 
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)YoungSu Son
 

What's hot (20)

Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지[11]Android DataBinding : 기초에서 고급까지
[11]Android DataBinding : 기초에서 고급까지
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
 
Open Source Engineering V2
Open Source Engineering V2Open Source Engineering V2
Open Source Engineering V2
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴  안드로이드 오픈소스 그리고 패턴
안드로이드 오픈소스 그리고 패턴
 
엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612
 
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Redux
ReduxRedux
Redux
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
 

Viewers also liked

Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeOpersys inc.
 
Fantastic Forty Share Point Templates
Fantastic Forty Share Point TemplatesFantastic Forty Share Point Templates
Fantastic Forty Share Point TemplatesDU1NASA
 
شهادة ادارة الاداء
شهادة ادارة الاداءشهادة ادارة الاداء
شهادة ادارة الاداءAbdulkader Alotebe
 
Augmented Reality - A Marketer's Perspective
Augmented Reality - A Marketer's PerspectiveAugmented Reality - A Marketer's Perspective
Augmented Reality - A Marketer's PerspectiveBenjamin Bykowski
 
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...EPL, Inc.
 
Ficha instrumentos de la canción
Ficha instrumentos de la canciónFicha instrumentos de la canción
Ficha instrumentos de la canciónSARA ORIO ABAD
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UIOpersys inc.
 
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalari
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalariKompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalari
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalariuvcd
 
Litrona power point1
Litrona power point1Litrona power point1
Litrona power point1musimusikera1
 
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇Kli̇vus tümörleri̇ni̇n cerrahi̇si̇
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇Abdurrahman Şimşek
 
Bacterial infection of oral cavity  / dental implant courses by Indian dental...
Bacterial infection of oral cavity  / dental implant courses by Indian dental...Bacterial infection of oral cavity  / dental implant courses by Indian dental...
Bacterial infection of oral cavity  / dental implant courses by Indian dental...Indian dental academy
 
Periodontal disease
Periodontal diseasePeriodontal disease
Periodontal diseaseSoz Najat
 
Luka bakar
Luka bakarLuka bakar
Luka bakarkeynechr
 
Ulcerative &amp; inflammatory diseases of oral cavity i
Ulcerative &amp; inflammatory diseases of oral cavity iUlcerative &amp; inflammatory diseases of oral cavity i
Ulcerative &amp; inflammatory diseases of oral cavity iBe a Good Doctor Ali Dirie
 

Viewers also liked (19)

Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC Europe
 
mi familia
mi familiami familia
mi familia
 
info on Ancient Arts
info on Ancient Artsinfo on Ancient Arts
info on Ancient Arts
 
Fantastic Forty Share Point Templates
Fantastic Forty Share Point TemplatesFantastic Forty Share Point Templates
Fantastic Forty Share Point Templates
 
Power point eloisa
Power point eloisaPower point eloisa
Power point eloisa
 
شهادة ادارة الاداء
شهادة ادارة الاداءشهادة ادارة الاداء
شهادة ادارة الاداء
 
Augmented Reality - A Marketer's Perspective
Augmented Reality - A Marketer's PerspectiveAugmented Reality - A Marketer's Perspective
Augmented Reality - A Marketer's Perspective
 
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...
Right Ventricular Cardiomyopathy in the Rat - Is There an Association with Ga...
 
Ficha instrumentos de la canción
Ficha instrumentos de la canciónFicha instrumentos de la canción
Ficha instrumentos de la canción
 
Inside Android's UI
Inside Android's UIInside Android's UI
Inside Android's UI
 
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalari
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalariKompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalari
Kompleks torasik aort hastaliklarinda acik cerrahi ile hibrid stent uygulamalari
 
Litrona power point1
Litrona power point1Litrona power point1
Litrona power point1
 
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇Kli̇vus tümörleri̇ni̇n cerrahi̇si̇
Kli̇vus tümörleri̇ni̇n cerrahi̇si̇
 
Polikistik over ameliyatı
Polikistik over ameliyatıPolikistik over ameliyatı
Polikistik over ameliyatı
 
Bacterial infection of oral cavity  / dental implant courses by Indian dental...
Bacterial infection of oral cavity  / dental implant courses by Indian dental...Bacterial infection of oral cavity  / dental implant courses by Indian dental...
Bacterial infection of oral cavity  / dental implant courses by Indian dental...
 
Periodontal disease
Periodontal diseasePeriodontal disease
Periodontal disease
 
Luka bakar
Luka bakarLuka bakar
Luka bakar
 
Ulcerative &amp; inflammatory diseases of oral cavity i
Ulcerative &amp; inflammatory diseases of oral cavity iUlcerative &amp; inflammatory diseases of oral cavity i
Ulcerative &amp; inflammatory diseases of oral cavity i
 
[Binh nguyen] Mobile Application Automation Testing iOS and Android
[Binh nguyen] Mobile Application Automation Testing iOS and Android [Binh nguyen] Mobile Application Automation Testing iOS and Android
[Binh nguyen] Mobile Application Automation Testing iOS and Android
 

Similar to 04 안드로이드 응용프로그램의 구조

Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본Lee Sang-Ho
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd weekEunGi Hong
 
Windows via c++ part 1
Windows via c++ part 1Windows via c++ part 1
Windows via c++ part 1Shin heemin
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
Effective C++ Chapter 3 Summary
Effective C++ Chapter 3 SummaryEffective C++ Chapter 3 Summary
Effective C++ Chapter 3 SummarySeungYeonChoi10
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3성연 김
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰안드로이드 프로그래밍 정복 - Android Study #어댑터뷰
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰Jake Yoon
 
객체지향 설계
객체지향 설계객체지향 설계
객체지향 설계준영 조
 
9 object class
9 object class9 object class
9 object class웅식 전
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1jangpd007
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로NHN FORWARD
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 

Similar to 04 안드로이드 응용프로그램의 구조 (20)

Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
[방송통신대 컴퓨터과학과] 2020년 1학기 전공 모바일 앱 프로그래밍 기말평가 제출본
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week안드로이드 개발하기 2nd week
안드로이드 개발하기 2nd week
 
Windows via c++ part 1
Windows via c++ part 1Windows via c++ part 1
Windows via c++ part 1
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Effective C++ Chapter 3 Summary
Effective C++ Chapter 3 SummaryEffective C++ Chapter 3 Summary
Effective C++ Chapter 3 Summary
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 
MEC++ 5
MEC++ 5MEC++ 5
MEC++ 5
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
2. template
2. template2. template
2. template
 
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰안드로이드 프로그래밍 정복 - Android Study #어댑터뷰
안드로이드 프로그래밍 정복 - Android Study #어댑터뷰
 
객체지향 설계
객체지향 설계객체지향 설계
객체지향 설계
 
9 object class
9 object class9 object class
9 object class
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
 
Context
ContextContext
Context
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 

More from Wanbok Choi

[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵Wanbok Choi
 
WWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWanbok Choi
 
iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기Wanbok Choi
 
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기Wanbok Choi
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017Wanbok Choi
 
try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기Wanbok Choi
 
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017Wanbok Choi
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 
06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션Wanbok Choi
 

More from Wanbok Choi (9)

[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
[Let'Swift 2019] 실용적인 함수형 프로그래밍 워크샵
 
WWDC 2019 Cheatsheet
WWDC 2019 CheatsheetWWDC 2019 Cheatsheet
WWDC 2019 Cheatsheet
 
iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기iOS 개발자의 Flutter 체험기
iOS 개발자의 Flutter 체험기
 
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
[이모콘 2018 S/S] Swift로 코인 트레이딩 봇 만들기
 
RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017RxSwift 활용하기 - Let'Swift 2017
RxSwift 활용하기 - Let'Swift 2017
 
try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기try! Swift Tokyo 2017 후기
try! Swift Tokyo 2017 후기
 
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
기획, 디자인 변경에 강한 카드뷰 만들기 - iOS Tech Talk 2017
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 
06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션06 멀티뷰 애플리케이션
06 멀티뷰 애플리케이션
 

04 안드로이드 응용프로그램의 구조

  • 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.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

Editor's Notes

  1. Multimedia 응용프로그램에 대한 다음과 같은 사실들을 알아낼 수 있다.▒ 그 응용프로그램은 com.androidbook.multimedia라는 패키지를 사용한다.▒ 응용프로그램의 버전 이름(version name)은 1.0.0이다.▒ 응용프로그램의 버전 부호(version code)는 1이다.▒ 응용프로그램의 이름과 제목(label)은 자원 파일 /res/values/strings.xml 안의 @string/app_name이라는 문자열 자원에 저장되어 있다.▒ 응용프로그램 아이콘은 /res/drawable디렉터리에 있는 icon이라는 이미지 파일이다(그래픽형식은 PNG일 수도 있고 JPG나 GIF일 수도 있다).▒ 응용프로그램은 네 개의 액티비티들(MainMenuActivity, AudioActivity, MovingActivity,StillActivity)로 구성된다.▒ 응용프로그램의 주 진입점은 MainMenuActivity액티비티다.▒ 응용프로그램 실행에는 다음과 같은 권한들이 필요하다: 오디오 녹음 권한, 기기의 바탕화면 설정 권한, 내장 카메라 접근 권한, 설정 쓰기(변경) 권한.