본문 바로가기
Android/이것저것

안드로이드 입문

by 일상 속 둔치 2018. 9. 10.

 스마트폰 시장은 크게 안드로이드와 ios로 나뉘어진다. 그 중 우리가 알아볼 안드로이드는 전세계 스마트폰 시장에서 70% 이상 점유하고 있는 플렛폼이다.


안드로이드 버전

 안드로이드 버전은 알파벳 순으로 매기고 있다. 재밌는 것은 다 빵 종류로 네이밍을 한다는 것이다. 그래서 개발자, 팬들 사이에서는 다음 버전 명을 유추해보곤 한다. 현재 9.0버전인 파이까지 공개된 상태이다.


Android 1.5 Cupcake

Android 1.6 Donut

Android 2.0~1 Eclair

Android 2.2 Froyo

Android 2.3 Gingerbread

Android 3.0 Honeycomb

Android 4.0 Ice Cream Sandwich

Android 4.1~3 Jelly Bean

Android 4.4 KitKat

Android 5.0~1 Lollipop

Android 6.0 Marshmallow

Android 7.0~1 Nougat

Android 8.0~1 Oreo

Android 9.0 Pie


각 버전의 세부 내용은 다음 링크를 참조하면 좋을것 같다. https://ko.wikipedia.org/wiki/안드로이드_버전_역사


안드로이드는 Source file을 Complier가 해석하여 나온 .dex file을 apkbuilder가 apk파일로 만든다. 우리는 apk를 받아서 안드로이드 어플리케이션을 설치하고 사용한다.


드로이드 4대 구성요소(component


Activity, Service, Broadcast Receiver, Content Provider


1. Activity

 안드로이드에서 앱의 한 화면을 말한다. 다양한 View들이 들어있으며 우리가 생각하는 어플리케이션의 모습이 바로 Activity 화면이다. 쉽게 말해서 User Interface이다. 액티비티는 최소 1개 이상 존재해야하며 너무 많게 되면 앱이 루즈해질 수  있다.

 실제 구현시에는 기능을 담당하는 class파일과 UI를 담당하는 XML파일이 1쌍을 이룬다.


Activity Stack

 여러개의 액티비티가 존재 할 수 있는 데 새로운 액티비티가 실행되면 액티비티 스택에 쌓이게 된다. 액티비티가 종료되면 액티비티 스택에서 없어진다. 우리가 버튼으로 계속 화면을 넘긴 후 뒤로가기를 누르면 전 액티비티가 나오는 것도 액티비티 스택에 쌓여있기 때문이다.


2. Service

 Activity처럼 사용자와 상호작용을 하는 것이 아니라 Background에서 작동하는 요소이다. 예시로 음악 재생 어플리케이션이 있다. 스마트폰에서 음악 재생 앱을 실행시키고 종료를 시켜도 노래 재생은 계속된다.


3. Broadcast Receiver

 이름에서 알 수 있드시 방송과 관련이 있다. 다른 앱에서 발생한 이벤트들을 받아오는 일을 한다. 예를 들어 배터리가 부족하다거나 전화가 온다거나 하는 이벤트들을 처리한다.


4. Content Provider

 어플리케이션 사이에서 데이터를 공유하는 요소이다. 정해진 인터페이스로 외부에 노출하기도 하여 다른 어플리케이션에서 사용 할 수 있게 한다.


Intent

 인텐트는 다른 액티비티를 실행시킬 때 사용한다. 다른 액티비티를 실행시킬 때 필요한 데이터를 넘겨야하는 경우가 정말 많다. 이때 Intent객체에 데이터를 넣어서 액티비티를 실행시킬 수 있다. 같은 패키지 (내가 만든 앱)의 액티비티 뿐만 아니라 타 어플리케이션의 액티비티하고도 소통이 가능하다.


1. 명시적 인텐트 (explict intent)

 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 명확히 알 수 있는 경우에 사용하며 어플리케이션 내부에서 사용합니다.


2. 암시적 인텐트 (implicit intent)

 명시적 인텐트는 호출할 대상이 명확했지만 암시적 인텐트는 그렇지 않은 경우에 사용한다. 예를 들어 인터넷 브라우저를 열어야하는 경우 크롬, 삼성인터넷, 네이버 등의 웹 브라우징 앱 중 고르라는 것이 있다. 암시적 인텐트를 사용하기 위해서는 intent filter를 알아야한다.

 intent filter에서는 action과 category를 지정해서 어떤 액티비티가 실행될 것인지 결정하게 된다. 필요하면 data도 정의할 수 있다. 이는 나중에 예제코드와 다시 알아보자.


Activity Life Cycle

 

1. onCreate()

 액티비티가 처음 생성되었을 때 호출된다. 뷰 생성, 목록에 데이터 바인딩하기 등을 실행한다.


2. onStart()

 액티비티가 사용자에게 표시되기 직전에 호출된다.


3. onResume()

 액티비티가 시작되고 사용자와 상호작용하기 직전에 호출된다. 이 시점의 액티비티는 액티비티 스택의 맨 위에 있다.


4. onPause()

 시스템이 다른 액티비티를 재개하기 직전에 호출된다. 액티비티가 다시 맨 앞 화면으로 돌아오면 onResume이 실행되고 보이지 않게 되면 onStop()이 실행된다.


5. onStop()

 액티비티가 더이상 사용자에게 표시되지 않게 되면 호출된다. 이 때 메모리가 부족하는 등 문제가 있으면 액티비티는 kill(삭제)당한다. 만약 액티비티가 다시 사용자와 상호작용하면 onRestart()가 실행되고 액티비티가 사라지면 onDestroy()가 실행된다.


6. onRestart()

 액티비티가 중단되었다가 다시 시작되기 직전에 호출된다.


7. onDestroy()

 액티비티가 소멸되지 전에 호출된다.


*Pause와 Stop이 감이 안 올 수 있는 데 다른 액티비티가 실행되면 onPause -> onStop 이렇게 onPause에서 머물지 않고 바로 실행된다. 즉, 사용자의 입장에서 머무는 액티비티 주기가 아니다.


프로젝트 파일 구성

1. AndroidManifest.xml

 어플리케이션의 환경 설정을 담당하는 부분이다. 액티비티가 추가되면 매니페스트 파일에 등록이 되야한다. 아니면 오류난다ㅎㅎ. 각종 권한(카메라, 네트워크 등)들도 여기서 설정해준다. 어플리케이션 이름도 여기서 바꿀 수 있으며 처음 시작하는 액티비티 역시 설정 가능하다.


2. java

 안드로이드의 작동을 담당 하는 액티비티, 서비스, 클래스 등이 구현되어있는 자바(혹은 코틀린) 파일들이 있는 폴더이다.


3. res

 resource의 줄임말이며 필요한 layout(UI), 이미지 파일 등이 위치하는 곳이다.

- drawable : 이미지 파일들이 저장되는 폴더이다.

- layout : 액티비티의 UI를 구성하는 xml파일이 저장되는 곳이다.

- mipmap : 앱의 아이콘이 들어있는 폴더이다.

- values : 색상이나 먼저 정의한 스트링들이 xml의 형태로 저장되어있는 폴더이다.


* R.id.~~~라는 것을 코딩하다보면 자주 접할 것이다. R파일은 프로그래머가 1도 손댈 필요없다. 컴파일러에서 뷰를 컨트롤 할 수 있도록 정수형으로 id를 붙여놓여 작성해놓은 것이다. 자동으로 생성/삭제되며 컴파일러가 자기가 쓰려고 하는 거니까 손대지말자. R은 Resource!


4. gradle

 manifest가 어플리케이션의 환경 설정을 담당하는 부분이었다면 gradle은 어플리케이션의 빌드 설정을 담당하는 부분이다. module단위와 project단위가 있는 데 들여다 보면 compileSdkVersion 등 빌드시 필요한 내용들이 들어있다. 프로젝트 단위의 gradle은 자주 건들지 않는다. 외부 라이브러리를 사용할 때 추가정도 해준다. 모듈단위 gradle은 우리 앱 단위이기 때문에 앞서 말한 컴파일 sdk 버전을 변경할 때 등 사용한다.





사진 출처 


· [액티비티 스택]

https://developer.android.com/guide/components/tasks-and-back-stack?hl=ko


· [액티비티 생명주기]

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

'Android > 이것저것' 카테고리의 다른 글

SimpleDateFormat  (0) 2020.05.06
안드로이드 툴바 없애기 (Action Bar)  (0) 2018.11.04
Image Asset Studio  (0) 2018.09.15
자이로스코프 센서 사용하기  (1) 2018.09.09
랜더링 오류 해결 (sdk ver.28)  (0) 2018.09.09

댓글