본문 바로가기

책 요약하기/코틀린을 활용한 안드로이드 프로그래밍

#10. 액티비티와 인텐트 2021-02-17

- 요약 -

1. 안드로이드의 4대 컴포넌트는 액티비티, 서비스, 브로드캐스트 리시버, 콘텐트 프로바이더입니다.

2. 액티비티는 안드로이드폰에 나타나는 화면 하나하나를 말하는데, 일반적으로 액티비티 하나당 XML 파일 하나를 만듭니다.

3. 새로운 액티비티를 만들때는 android.app.Activity 클래스를 상속받습니다. 그리고 추가한 액티비티는 AndroidManifext.xml 파일에 등록해야 합니다.

4. 명시적 인텐트는 일반적으로 사용자가 새로운 액티비티를 직접 생성하고 호출할 때 사용합니다.

5. 데이터를 한쪽 방향으로 전달하는 명시적 인텐트와 데이터를 양방향으로 전달하는 명시적 인텐트는 다음과 같이 동작합니다. 

(a) 데이터를 한쪽 방향으로 전달하는 명시적 인텐트

 

(b) 데이터를 양방향으로 전달하는 명시적 인텐트

 

6. 암시적 인텐트는 약속된 액션을 지정하여 안드로이드에서 제공하는 기존 응용 프로그램을 실행하는 것이며, 다음과 같이 동작한다.

 

7. 액티비티 생명주기는 액티비티의 생성부터 소멸까지의 주기를 말한다. 다른 액티비티가 나오는 경우에는 다음과 같은 순서로 메소드가 수행된다.

응용 프로그램 시작
(메인 액티비티 실행)
onCreate() -> onStart() -> onResume()
응용 프로그램 종료
(메인 액티비티 종료)
onPause() -> onStop() -> onDestroy()
다른 액티비티 요청 onPause() -> onStop()
다른 액티비티 종료
(메인 액티비티 복귀)
onRestart() -> onStart() -> onResume()

 

- 연습문제 -

1. 안드로이드 컴포넌트 중 ( 1 ) 는 응용 프로그램 사이에 데이터를 공유하기 위한 용도로, ( 2 )는 여러 응용 프로그램이나 장치에 메시지를 전달하기 위한 용도로, ( 3 ) 는 백그라운드에서 작동하기 위한 용도로, ( 4 )는 화면을 구성하는 용도로 사용된다.

답 : 

( 1 ) -> 컨텐트 프로바이더(Content Provider)

( 2 ) -> 브로드캐스트 리시버(Broadcast Receiver)

( 3 ) -> 서비스(Service)

( 4 ) -> 액티비티(Activity)

 

2. 명시적 인텐트에서 데이터를 전달할 때, 메인 액티비티에서 ( 1 ) 메소드로 인텐트에 데이터를 넣고, ( 2 ) 메소드로 인텐트를 서브 액티비티에 넘긴다. 서브 액티비티에서는 받은 데이터에 ( 3 ), ( 4 ), ( 5 ) 등의 메소드로 접근한다.

답 :

( 1 ) -> putExtra

( 2 ) -> startActivity

( 3 ) -> getStringExtra, getIntExtra, getBooleanExtra

 

3. 양방향 액티비티에서 메인 액티비티는 ( 1 )메소드로 서브 액티비티를 호출하고, 서브 액티비티는 ( 2 )메소드로 결과를 돌려준다.

답 :

( 1 ) -> startActivityForResult

( 2 ) -> onActivityResult

 

4. 액티비티가 정상적으로 시작하고 종료할 때 호출되는 Activity 클래스의 메소드를 차례대로 나열하시오.

액티비티 시작 onCreate() -> onStart() -> onResume()
액티비티 종료 onPause() -> onStop() -> onDestroy()
다른 액티비티 요청 onPause() -> onStop()
다른 액티비티 종료 onRestart() -> onStart() -> onResume()

 

5. [실습 10-1]을 개선하여 다음 그리과 같이 작동하도록 프로젝트를 작성하시오.

 

[activity_main.xml]

 

[second.xml]

[third.xml]

[MainActivity.kt]

 

[SecondActivity.kt]

 

[ThirdActivity.kt]

 

6. [실습 10-2]를 개선하여 결과 화면이 1등부터 1초마다 뷰플리퍼에 자동으로 나오도록 프로젝트를 작성하시오.

 

[activity_main.xml]

(★3개의 레이아웃 각각에 3개의 이미지뷰)

 

[result.xml]

(★ 뷰플리퍼 안에 9개의 이미지뷰 위젯 삽입)

 

[MainActivity.kt]

 

[ResultActivity.kt]

 

(★이미지별 투표수를 비교하기 위해 해당 투표숫자를 갖는 인덱스와 투표 값 변수 선언 및 초기화)

 

(★ 저는 선택정렬을 했습니다. 퀵정렬을 안쓰다보니 까먹어서 시간 되시는분들은 한번 해보세요 :))

(★ 투표수 별 내림차순으로 정렬하여 해당 정렬된 인덱스 값대로 이미지뷰에 차례대로 이미지를 저장했습니다. 이후 뷰플리퍼로 시작시 visible을 활성화 하여 자동보기를 합니다.)

 

이상 마치겠습니다 :)