3. 동작 원리

3-1 어플리케이션 설치

제작된 어플리케이션은 .apk라는 파일로 압축되어 배포된다. 배포된 apk파일을 단말기에 다운로드하게 되면 자동으로 설치가 이어진다.
설치 후 특정 시점이 발생되면 해당 구성 요소를 OS가 실행을 해야하기 때문에 해당 어플리케이션의 어떤 실행단위 들이 있는지 확인을 한다.
따라서, 설치가 끝나면 Android OSAndroidManifest.xml 파일의 내용을 분석한다. OS는 안드로이드 4대 구성요소 중 어떤 것들이 있는지 파악하여 정리를 한다.



3-2 어플리케이션 실행


 어플리케이션이 실행하게 되면 화면으로 사용자에게 보여줘야 한다. 따라서, 첫번째 화면을 동작하는 Activity가 동작을 해야 한다. 이때 AndroidManifest.xml에 있는 여러 구성 요소 중 Activity를 찾고, 다음과 같이 작성되어 있는 것을 실행한다.

첫 번째 화면을 보여주는 Activity<action android:name="android.intent.action.MAIN" /> 이렇게 메인이라고 등록되어 있는 이름을 가지고 있는 Activity이다. <intent-filter>Activity의 이름을 설정하는 것이고 이러한 것이 여러 개가 있다면, 가장 위에 등록되어 있는 Activity를 첫 번째 화면으로 인식하고 그 화면을 제공한다.
따라서, 저것을 분석하면 My Application‘Main으로 이름을 짓겠다라는 의미이고, 첫번째 화면을 보여주는 Activity임을 의미한다.

안드로이드 OS는 이 메인이란 이름이 등록되어져 있는 Activity를 찾고, Activity name 속성 안에 들어있는 문자열 “.MainActivity”를 읽어 온다. 이 값은 클래스의 이름이 되어 OS는 이 클래스가 첫 번째 화면을 관리하는 Activity 클래스임을 인식한다.

이렇게 첫 번째 Activity를 찾게 되면 클래스의 객체를 생성하고, onCreate 메서드를 자동으로 호출한다. 화면을 보여주며, 메서드 안에 지정된 명령어를 수행하는데 기본적으로 setConteteView 메소드를 실행한다. 이 메소드는 해당 Activity가 관리하는 화면을 지정하는 메소드이다.


여기서 R.layout.activity_main을 매개변수로 받는다. Rres파일을 의미하고, layoutres안에 layout파일을 의미하며, activity_mainactivity_main.xml파일을 의미한다. 이 파일의 코드를 분석해서 화면을 만들게 된다.

여기까지가 안드로이드 첫 번째 화면을 구동하면서, 어플리케이션 실행이 된다.

 

정리하자면 다음과 같은 이미지로 정리할 수 있겠다.

 

3-3. 안드로이드 4대 구성 요소

위에서 어플리케이션 실행 과정에서 Activity라는 개념이 나왔다.

 안드로이드의 4대 구성요소는 Activity, Service, Broadcast Receiver, Content Provider이다.

   - Activity: 눈에 보이는 화면을 관리하는 실행 단위이다.

   - Service: 화면을 가지지 않은 실행 단위이다. 즉 백그라운드 프로세싱을 의미한다.

   - Broadcast Receiver: OS가 명령을 받으면 실행되는 실행 단위이다.

   - Content Provider: 저장된 데이터를 제공하기 위해 실행되는 실행 단위이다.

안드로이드 어플리케이션은 이러한 4대 구성요소들을 통합 관리하는 실행단위의 꾸러미이다. , 안드로이드 어플리케이션 자체가 실행 파일이 아니라 그 안에 각각 실행이 가능한 독립적인 실행단위들이 있어 각각의 실행 단위가 자신들이 실행할 순서가 될 때 독립적으로 실행이 되면서 개발자가 작성한 코드를 실행하게 된다. 그것들이 모여서 하나의 어플리케이션을 구성하게 된다.
위 구성 요소들이 실행단위가 아니고 모두 클래스로 구성되어 있다. 안드로이드가 어떤 시점이 되면 그 시점에 맞는 클래스의 객체를 생성해서 자동으로 메소드를 호출하게 된다.

 

Activity 클래스는 눈에 보이는 화면이 실행될 때 안드로이드 OS가 객체를 생성해서 메소드를 호출한다.

Service 클래스는 백그라운드 프로세싱을 발생시켜야 할 때 클래스의 객체를 생성하여 필요한 메소드를 호출한다.

Broadcast Receiver 클래스는 어떤 사건이 발생하게 되면 그 사건과 관련이 있는 클래스들의 객체를 생성한 다음 객체가 가지고 있는 메소드를 호출한다.

Content Provider 클래스는 저장된 데이터를 다른 어플리케이션이 사용하기 위해 요청할 때 객체를 생성해서 메소드를 호출하게 된다.

이러한 4대 구성 요소들이 각각의 실행단위로 나뉘어서 객체로 생성되어 실행되며, 하나의 어플리케이션을 만들게 된다.

 

 

 

4. Test 해보기

안드로이드 스튜디오를 설치하고, 가상머신을 통해 간단한 어플리케이션을 구동해본다.

단순히 버튼을 누르면 goto0라는 메소드를 실행시켜 m.naver.com링크를 여는 프로세스를 진행한다.

먼저 UIActivity_main.xml에서 구성하였다.

다음과 같이 버튼 컴포넌트를 추가해주고 onClick메소드에서는 goto0를 넣어주어 버튼 클릭 시 goto0를 실행한다.
컴포넌트를 추가할 때 반응형 UI 빌드를 하기위한 ConstraintLayout을 사용하려면 위 이미지와 같이 제약조건을 달아준다.
파란색의 제약조건을 두어 크기가 다른 경우에도 해당 비율을 유지하며 UI를 유지할 수 있다.

 

 


Java goto0문을 보자.

goto0 메소드는 View라는 클래스를 인자로 받는다. ViewUI 화면을 구성하는 최상위 클래스인데, 버튼이라는 UI를 클릭했기에 이 값을 받아오기 위해 컴포넌트의 최상위 클래스를 받아와서 사용한다.


Intent
클레래스는 메시징 클래스로, 다른 앱 구성 요소로부터 작업을 요청하는 사용한다. 여기서는 다른 어플리케이션에서 해당 링크를 열어야 하므로 다른 앱으로 작업을 요청해야 한다. 따라서, 위 이미지와 같이 해당 객체를 생성하여 실행한다.

startActivityIntent 클래스를 매개변수로 하여 해당 값을 받아와 실행시키는 메소드이다.

버튼을 누르면 onClick 메소드로부터 goto0라는 메소드를 호출하게 되고, goto0메소드에서 Intent 객체를 생성하여 실행하게 되는 과정이 이 어플리케이션의 과정이다.

실행한 결과는 다음과 같다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기