Blinking My Melody

Android Studio 수업 정리 3

2019. 4. 14. 14:58

Android Application Components

- 사용자가 마음대로 New 해서 만들 수 없음

 

 

1. Activities

- UI가 있는 단일 화면, 하나의 Activity가 하나의 기능을 가지도록 구현하는 것이 좋음

- 하나의 App에 있더라도 각 Activity는 독립적

 

 

2. Services

- 백그라운드에서 실행, UI 제공 X

- 폰이 켜질 때 자동으로 켜지게 할 수도 있고 앱이 실행될 때 서비스가 같이 실행되서 나중에 빠질 수도 있음

- 백그라운드에서 파일을 다운 받는 등 오랜 시간이 걸리거나 화면이 꺼져도 동작해야 하는 경우 사용

 

 

3. Broadcast receiver

- 안드로이드에서는 시스템이 브로드캐스트라는 메시지를 보냄

- 알림 화면등을 생성해 사용자에게 이벤트 발생 알림

- 메시지 수신자이기 때문에 UI가 따로 있진 않지만 갱신은 가능, 출력 가능

- 화면 업데이트에는 관여하지 않는 것이 좋음

 => 화면 업데이트는 액티비티의 할 일

- 배터리 잔량 부족, 화면 꺼짐, 블루투스 기능 꺼짐 등 있음

 

* receiver 참고 : https://cocomo.tistory.com/419

 

 

4. Content providers

- 내 App이 가진 Contents를 다른 앱이 조회하거나 사용할 수 있도록 제공

- 누가봐도 폰에 무조건 있을 것 같은 기능들 (카메라, 계산기, 갤러리 등)

 

 

 

Activity Lifecycle

 

 

- onCreate() : 레이아웃 지정 및 각종 초기화

 

- onStart() : 내 앱 (Activity)이 화면에 출력되는 시점

 

- onResume() : 사용자의 터치가 가능할 때

 

- onPause() : 내 앱이 Foreground에서 떨어질 때

                 (시스템 팝업, 화면에는 뜨지만 터치가 안 먹히는 상황)

 

- onStop() : Activity가 화면에 더이상 나오지 않게 될 때

(예. 게임 중 전화가 오면 게임이 화면에서 사라지고 전화 화면이 위에 덮히는 상황, 여기서 게임 Activity는 가려진 것일 뿐 종료는 아님)

 

- onDestroy() : 이전 설정을 못 쓸 때, Activity가 Finish되거나 완전히 새로 로딩 되어야 할 때 (예. 화면 회전 등)

 

 

 

 

 

 

Intent (작업 요청 메세지)

 

 

- 앱 컴포넌트가 무엇을 할 것인지를 담는 메세지 객체 ( 메세지 : 의사소통을 하기 위해 보내고 받는 것)

- 메세지를 사용하는 가장 큰 목적 다른 Activity, Services, Broadcast Receiver, Contents provides 등을 실행하는 것

  => Intent는 그들 사이에 데이터를 주고 받기 위한 용도로 사용

       (예. Activity가 Android에게 보내는 요청, Activity가 다른 Activity의 기능이 필요할 때 보내는 것)

 

장점

- 요청을 받을 Activity가 내 App의 Activity건, 다른 App의 Acitivity건 동일한 양식

- 요청을 주고 받을 수 있는 상대가 내 App 뿐 아니라 폰에 설치된 전체 App으로 확장

- 다른 앱의 Activity를 사용할지라도 동일한 객체를 통해 데이터 주고 받기 가능

단점 - 간단한 화면 전환도 Intent를 사용해야 하고 간단한 Parameter도 Intent로 전달해야 함

 

 

1. 명시적 Intent

- Class Type 지정해 요청, 즉 내 App내의 Activity 요청

- 내 App에 있는 다른 화면들을 부를 때 주로 사용

 

 

2. 묵시적 Intent

- 내가 필요한 동작을 지정하여 요청하는 것

- 지금 내가 하고 싶은 동작만 정의, 어떤 앱이 실행할지는 모름

(예. 사진첩에서 공유하기 버튼을 눌렀을 때, 사용자 폰에 설치 된 여러 앱이 뜨고 그 중 하나를 골라 실행)

 

 

Activity Stack

 

 

- startActivity를 호출하면 생성된 Activity는 Activity Stack에 쌓임, 이 후 back키를 누르거나 스스로 finish() 함수를 호출하면 종료되면서 stack에서 나옴

- finish()가 실행되기 전까지는 mainActivity는 사라지지 않음

  => secondActivity가 생겨도 mainActivity는 그대로 있고 그 위에 secondActivity가 불러와지는 형태

 

 

1. 단방향 전달

- 호출하는 Activity에서 호출되는 Activity에 데이터를 Intent를 통해 전달 가능

(예. mainActivity ----"Hello!"(string)----> secondActivity ----"Hello!"(string)----> TextView)

 

 

2. 양방향 전달

- 보내는 Activity쪽에서 보낼 데이터를 Intent에 보내면 됨, 다만 결과를 달라는 뜻으로 startActivityForResult()를 호출

- 불리는 ActivitysetResult() 함수를 통해 성공/실패 설정 가능, Intent를 통해 데이터 반환도 가능

- 불리는 Activity가 종료되면 보내는 Activity의 onActivityResult 콜백 불림