앱의 기본 특징 - 피할 수 없는 외부와의 상호작용
앱은 PC와 다르게 외부 작용으로부터 직접적으로 상호작용을 받는 특징이 있다.
예를들면, 휴대폰 모바일 게임 앱을 사용하다가,
외부 작용인 "전화"가 걸려오면, 진행 중인 게임이 멈추고
"전화"가 걸려온다.
그러면, 전화가 와서 전화 화면으로 화면이 바뀌게 되면, 앱에서는 어떤 동작을 해야될까?
참고로, 전화가 걸려오는 건 안드로이드 OS에서 작동하는 시스템이다. 그렇기에, OS를 수정하는 건 어려운 일..
이에 대해선, Activity의 LifeCycle을 통해 해결한다.
오늘은, Activity LifeCycle에 대해 배워보고,
안드로이드 앱에서 외부 작용을 어떻게 처리하는지를 알아보자!
Activity LifeCycle (생명주기) 란,
하나의 Activity가 생기고, 작동하며, 없어지는 Cycle이다.
따라서, 모든 Activity는 동일한 LifeCycle을 지니고 있다.
Activity LifeCycle을 통해 아래와 같은 앱 실행에 대한
불편한 점을 해소시킬 수 있다.
# 앱 실행 시 불편한 점들 - LifeCycle을 통해 해소~
- 앱에서 제공되는 어떤 버튼을 통해 웹브라우저를 열었다가 다시 앱으로 돌아왔는데,
기존에 입력했던 데이터가 다 사라지면?
(회원가입할 때 휴대폰인증을 하고왔는데, 회원가입 정보가 다 사라져있음.) - 지도 앱을 사용하다가 잠시 홈 키를 통해 나갔는데, 계속 GPS를 사용하여 배터리를 많이 사용하면?
- 대용량의 파일을 다운로드 하다가 오래 걸려서 다른 앱을 사용했는데, 다시 돌아왔을 때 다운로드를 처음부터 하면?
# Activity LifeCycle 정리
외부 작용이 언제들어왔냐에 따라서 Activity를 처리하는 것이 아닌,
Activity (우리 화면) 이 어떻게 되었냐에 따라서 별도로 Activity를 처리한다.
그리고 이것을 Activity LifeCycle이라고 한다.
그러니깐, LifeCycle은 언제 이 작업을 해야해 라고
Activity 규정을 세워둔 것임! (Activity 예외처리 느낌)
LifeCycle은 앱의 목적에 따라 각각 달라진다.
목적을 이해하고, 그에 맞춘 LifeCycle을 구성하면 된다.
(음악재생 앱 - 음악 정지, 게임 앱 - 게임 정지, 기록 앱 - 기록 정지 및 저장 --- 등등)
Activity LifeCycle의 Activity의 메소드들
다음은 Activity의 LifeCycle을 만들어주기 위한 Activity의 메소드들이다.
아래와 같은 메소드를 사용해서 앱의 LifeCycle을 설정해준다.
- Activity가 작동하기 전 실행되는 LifeCycle의 메소드들
onCreate()
Activity가 처음 실행되었을 때 호출된다.
실행 Activity로써 고유한 Activity를 생성한다고 생각하면 된다. 그리고, 고유한 Activity를 가지고 앱의 동작을 컨트롤한다.
(고유한 Activity를 가진 뒤의 처리는 onStart(), onResume() 등등 그외의 LifeCycle 메소드들을 통해 실현된다.)
고유한 Activity를 종료하고, 다시 Activity를 실행할 때, 또 다른 고유한 Activity로써 호출된다.
- 마치 자바의 프로그램 실행 시 객체 초기화하는 느낌?
이 부분에 대해선, 아직 실습을 해보지않았기에
대략적으로 유추해본 내용입니다.
그렇기에, 참고만 하시는 걸 권장드립니다.
추가로 포스팅되는 글에서 더 자세하게 정리해서 올리겠습니다 ㅎㅎ
onStart()
Activity가 화면에 제대로 표시되기 직전에 호출된다.
(onCreate와 다르게 나갔다가 들어오면 또 호출된다. - Activity를 나갔다가 다시 들어오면, 직전에 호출되기 때문 )
# 사용 예
배경음악 재생준비
- 외부 파일을 사용해야 해서 오래 걸리기 때문이다.
그리고, 배경음악 재생은 화면이 보이기 전에 가져오는게 좋기 때문이다.
onResume()
Activity가 사용자와 상호작용이 가능해질 때 호출된다.
즉, 사용자가 화면에 있는 것들을 누르는 것이 가능해질 때 호출된다.
(한마디로, 사용자가 호출된 Activity를 보고있을 때, 백그라운드 실행이 아닌 상태일 때 호출된다.)
# 사용 예
지도 앱에서 GPS 사용 활성화
- 본격적으로 사용자가 GPS결과를 볼 수 있기 때문이다.
- Activity가 작동한 후 실행되는 LifeCycle을 메소드들
onPause()
Activity의 일부가 가려지거나, 투명하게 보이는 경우 호출된다.
(작동하고 있는 Activity에서 일부가 가려지거나 투명해지는 행위를 접했을 때 호출된다.)
# 사용 예
전화가 걸려올 때, 전화받기 화면으로 변환될 때 앱을 일시정지
- 전화가 걸려오면, 앱에서 하던 작업을 일시정지시킨다.
onPause() - onResume()
서로 반대되는 작업으로
상호작용 관계를 가지고 있다.
# onPause()와 onResume()의 상호작용 관계 - 상세설명
앱을 첫 실행 시 onResume() 이 호출되어 Activity의 여러 기능들이 사용됨.
전화가 걸려와서 onPause()가 호출되어 Activity의 실행되고 있는 작업을 일시정지 시킴.
전화를 끊고나서 다시 앱으로 접속했을 때, onResume()이 호출되어 일시정지된 상태에서 다시 Activity의 여러 기능을 사용한다.
onStop()
Activity가 완전히 사용자에게 보이지 않을 때 호출된다.
(홈 키나 다른 앱으로 완전히 넘어갔을 때 호출된다.)
# 사용 예
무거운 작업들 (예: 데이터 저장)
- 오래 걸리는 작업을 완전히 사라지기 전 (onPause)
진행하면 사라지기 전에 안 끝날 수도 있다.
onRestart()
Activity가 완전히 사라졌다가 다시 보이기 시작할 때 호출된다.
(홈에서 나갔다 들어오거나 다른 Activity에서 다시 돌아올 때 호출된다. - 즉, onStop 이후 호출된다.)
# 사용 예
앱 평가 요청 팝업
- 처음 실행 시에는 보이지 않지만, 다시 왔을 때 해야 하는 작업들을 처리한다.
onDestory()
Activity가 완전히 사라졌을 때 호출된다.
(Actvity가 사용자로부터 Finished 되었을 때 호출된다.)
# 사용 예
비디오 플레이어에서 영상 파일 닫기
Activity LifeCycle의 메소드들 간의 (작동) 관계
앱 실행도중 사용자로부터나, OS로부터 외부 작용을 받았을 때
처리되는 LifeCycle의 메소드들은 위와 같이 "대략적으로" 정리할 수 있다.
이 부분에 대해선, 어느정도 감이 잡히긴해서
직접 사용해보면서 더 구체화시키면 되겠다 ㅎㅎ
Activity LifeCycle (생명 주기) 정리
LifeCycle은 안드로이드 앱이 실행될 때,
앱의 외부 작용으로부터의 예외처리를 해주는 것을 뜻한다.
이때, 앱의 외부작용은 사용자의 안드로이드 OS 사용일수도 있고,
안드로이드 OS 시스템 상의 작업일 수도 있다.
그래서, 이러한 외부작용으로부터 Activity의 LifeCycle 메소드들을 사용해 외부작용으로의 예외처리를 진행한다.
(부가적인 Activity 작업이라고 생각이 들지만, 앱 사용자 관점에서 생각해보면, 해당 작업은 필수여야만 한다.)
# Activity의 LifeCycle이 필요한 이유
회원가입을 진행하다가, 휴대폰 본인인증 후 다시 이어서 가입을 할 때를 생각해보자,
이때 이전에 기록한 정보가 사라져있다면 어떨 것 같은가?
이러한 불편함을 막기 위해서 LifeCycle이 필요하다는 소리다 ~
# 안드로이드 앱을 만들 때는 LifeCycle을 설계하자 ㅎㅎ
실제로 앱을 개발할 때는 Activity의 LifeCycle을 설계하여 사용자 편의성 앱을 구성한다!
안드로이드 앱의 권장 아키텍처 내용에도 포함되어 있는 것 같기도 하다 - 앱 만들 때는 반드시 이 점을 고려해야돼! 라고 지침
앞으로의 안드로이드 공부계획
오늘, UMC 해커톤을 "안드로이드" 부서로 신청하였다.
이번에도 새로운 도전이다.
저번에는 Server - node.js 부서로 해커톤을 신청하여 나갔었다.
하지만, 이번엔 2학기에 새롭게 배우는 안드로이드 부서로 했기에
해커톤을 나가기 전에 안드로이드에 대해 공부를 해야된다.
UMC 안드로이드의 7주차 강의까지 수강하면, 해커톤을 충분히 참여할 수 있다고 했다.
그래서, 미리 안드로이드 선행을 해볼 예정이다.
# 안드로이드 선행 계획
학기 중에 소프트 동기와 함께 앱을 기획하고 개발하는 프로젝트가 있기에,
해당 프로젝트를 하면서 안드로이드 선행을 해볼 것이다.
그리고, 지금까지 UMC 안드로이드 강의는 5주차까지 올라온 상태이다.
6주차는 11/5일, 7주차는 11/12일에 올라온다.
그래서 5주차까지 이번주 시험이 끝나고 모두 공부할 예정이고,
6주차, 7주차에 대해선 구글링이나, 유튜브를 통해 따로 학습할 예정이다.
어짜피 학기 중 안드로이드 프로젝트를 완성시켜야 되기에 이전에 공부를 완료해둬야한다.
그래서, 이번주 시험이 모두 끝나고나서,
UMC 4주차 실습강의 & UMC 5주차 이론, 실습강의를 모두 수강할 것이고,
모두 수강한 후 다음주 안드로이드 학습계획을 다시 정리해서 포스팅하겠다.
정리하며...
시험이 끝난 후 할 일이 많다.
이 일들은 내가 벌인 일들이고, 무책임하게 임하지 않고,
책임감있게 내가 벌인 일들을 하나씩 해쳐나갈 예정이다 ㅎㅎ
그래서, 어설프더라도 해보면서 발전시켜나갈 것이다 ^.^
11월달은 프로젝트의 날..
온앤오프 백엔드 NestJs로 개발시작
관상 mbti 안드로이드 앱 개발
UMC 안드로이드 해커톤
Pre-StartUpTon 진행
잊지말자, 뭐든지 어설프게 시작하기.
그리고, 책임감있는 사람되기.
'📚 스터디 > 프론트엔드' 카테고리의 다른 글
[안드로이드] 6주차 실습: BottomNavigation & ViewPager2 - TabLayout (0) | 2022.11.06 |
---|---|
[안드로이드] 5주차 실습: RecyclerView 사용 (5) | 2022.11.05 |
[안드로이드] 6주차: 고급 Layout과 View (0) | 2022.11.05 |
[안드로이드] 4주차: LifeCycle 실습 (0) | 2022.11.01 |
[안드로이드] 3주차: Activity 전환 & Fragment 전환 (0) | 2022.10.10 |