반응형

안드로이드에서 화면은 엑티비티로 만듭니다.

그런데 앱을 만들 때는 화면이 하나만 있는 경우는 거의 없습니다.

여러 개의 화면을 만들고 하나의 화면에서 다른 화면으로 전환해 주는 기능이 있어야 하는 거죠.

그렇다면 어떻게 화면을 추가하고 어떻게 전환하는 걸까요?

화면을 만들어 추가하면 직접 실행할 수 있는 걸까요?

액티비티를 실행하기 위해서는 인텐트라는 것을 만들고 시스템으로 요청하는 과정이 필요하다는 것을 알아야 합니다.

새로운 화면을 추가하고 그 화면으로 어떻게 전환하는지 알아봅시다.



애플리케이션 구성요소

하나의 화면을 나타내는 액티비티는 애플리케이션 구성요소 중의 하나입니다.

애플리케이션 구성요소로는 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(Broadcast Receiver), 컨텐트 프로바이더(Content Provider)가 있는데 이 클래스들은 안드로이드 SDK에서 제공하는 클래스들입니다.

애플리케이션 구성요소 4가지

그런데 왜 애플리케이션 구성요소라고 분류해서 부르는 걸까요?

왜냐하면, 이것들은 시스템에서 관리하기 때문입니다.

다시 말해 애플리케이션 구성요소 중의 하나를 만들어 프로젝트에 추가하면 시스템이 이것들을 다루게 되는 거죠.

따라서 새로 추가한 구성요소는 시스템이 알고 있어야 합니다.

여러분들이 매니페스트(AndroidManifest.xml) 파일에 어떤 구성요소가 추가되었는지를 넣어두면 앱이 설치될 때 시스템이 이 파일을 보고 구성요소를 확인할 수 있습니다.

따라서 애플리케이션 구성요소를 추가하면 반드시 매니페스트 파일에 그 정보를 넣어주어야 합니다.

 

액티비티 실행하기

액티비티를 새로 만들고 싶다면 안드로이드 스튜디오의 File -> New 메뉴를 이용해 만들 수 있습니다

프로젝트에 새로운 액티비티가 추가되면 매니페스트 파일에도 <activity> 태그가 자동으로 추가됩니다.

처음 보이는 화면을 메인 액티비티라고 부를 수 있는데 이 메인 액티비티 안에 들어있는 버튼을 눌렀을 때 새로운 액티비티를 화면에 보여주고 싶다면 startActivity나 startActivityForResult 메소드를 사용할 수 있습니다.

이 메소드들을 호출할 때는 인텐트 객체를 파라미터로 전달하여야 하므로 먼저 인텐트 객체를 만들고 메소드를 호출합니다.

Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
startActivityForResult(intent, 101);

 인텐트 객체를 만들 때는 컨텍스트 객체와 화면에 띄울 액티비티의 클래스 인스턴스를 파라미터로 전달합니다.

컨텍스트는 getApplicationContext 메소드를 호출하면 반환받을 수 있으며 화면에 띄울 액티비티의 클래스 인스턴스는 액티비티의 이름 뒤에 점(.)과 class를 붙이면 참조할 수 있습니다.

startActivityForResult 메소드를 호출하면 인텐트 객체가 시스템으로 전달되는데 구체적으로 액티비티 매니저에게 전달됩니다.

액티비티 매니저는 지정한 액티비티를 실행하여 화면에 보여줍니다.

이 과정에서 여러분이 직접 다른 액티비티의 메소드를 호출하여 실행하는 것이 아니라 시스템을 통해서 실행된다는 점을 꼭 기억하세요.

액티비티 전환하기

새로운 액티비티를 실행한 후에 다시 원래의 액티비티로 돌아가고 싶다면 단순히 finish 메소드를 호출하기만 하면 됩니다.

왜냐하면, 어플리케이션에서 실행되는 액티비티는 안드로이드 태스크(Android Task)에서 스택(Activity Stack)형태로 관리되며 이때 순서는 각 액티비티가 열린 순서와 같기 때문입니다.

화면에 보이는 액티비티가 있을 때 새로운 화면이 실행되면 그 화면은 기존 화면의 위에 보이는 것과 같습니다.

 

다시 말해 이전 화면은 멈춤 상태가 되면서 스택 안으로 들어간 것과 유사합니다.

그리고 새로 띄운 화면을 없애주면 이전 화면이 다시 보이게 됩니다.

이때 화면을 없애주는 메소드가 finish인 거죠.

새로 화면을 실행하는 방법과 이전 화면으로 돌아가는 방법을 알게 되었네요.

Task와 Back Stack 설명
https://developer.android.com/guide/components/tasks-and-back-stack.html?hl=ko

Q.액티비티가 XML 레이아웃 파일과 소스 파일로 구성된다고 했으니 이 각각을 따로 추가할 수도 있을까요?
A.네 번거롭지만 따로 추가할 수 있을 것 같습니다.

Q.만약 그렇다면 매니페스트에는 어떻게 이 액티비티 정보를 추가해야 할까요?
A. <application></application>태그 안에 <activity>새로 만든 정보내용</activity>을 추가하면 될 것 같습니다.

Q.새로운 액티비티를 띄웠다가 다시 돌아올 때 액티비티 간에 사람 이름이나 나이와 같은 데이터를 전달할 수도 있을까요?
A. 강의에서 MenuActivity.java 코드에서, putExtra함수로 key값과 value값을 전해주는 방식을 활용하면 두 화면 간에 사람 이름이나 나이와 같은 데이터를 전달해 줄 수 있을 것 같습니다.

 


반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

부가데이터  (0) 2019.03.08
인텐트(Intent)  (0) 2019.03.08
그리드뷰  (0) 2019.03.06
스피너(combobox) 사용하기  (0) 2019.03.06
리스트뷰  (0) 2019.03.05
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기