안드로이드 개발 화면 전환 할 때 Activity 삭제와 생성 방지 orientation, screenSize 속성 사용하기 |
환경: Android Studio |
기본적으로 안드로이드는 가로에서 세로로 화면을 회전하게 되면 Activity 생명 주기가 다시 시작됩니다. 그 말은 기존 Activity 를 삭제하기 위해 onStop() -> onDestory() 가 실행되고 다시 onCreate() -> onStart() -> onResume() 시작된다는 의미입니다. 이것은 화면을 표현하기 위한 layout xml 이 가로와 세로에 별도로 부여 될 수 있기 때문입니다. 하지만 Activity 재생성이 필요 없는 경우가 있겠죠. 예를 들어 RTSP 로 서버에서 동영상을 다운 받아 표현하는 경우 화면 회전으로 인해 onCreate() 가 다시 실행되면 RTSP 서버로 다시 연결해야 하고 불필요한 로딩 시간이 걸리게 됩니다. 경우에 따라서 화면 회전을 하더라도 Activity 재생성을 막는 방법에 대해 알아 보겠습니다.
▼ 안드로이드의 생명 주기는 잘 알다시피 다음과 같습니다. Activity 가 재시작 된다면 onCreate() -> onStart() -> onResume() 이 다시 시작되겠죠.
▼ 실제로 그렇게 되는지 로그를 찍어 보겠습니다. 그림과 같이 화면을 회전하게 되면 기존 Activity 는 삭제되고 다시 Create() 부터 생명주기가 시작됩니다. 예를 들어 인터넷 연결을 통해 영상을 받는 화면을 구현하고 있다면 화면 전환할 때 마다 다시 연결해서 다운받아야 하는 문제가 있습니다. 그리고 앱 성능도 떨어지겠죠.
▼ 이것을 막기 위해서는 AndroidManifest.xml 의 Activity 속성 중에서 configChanges 를 수정해야 합니다. 안드로이드 아이스크림 샌드위치(4.0) 부터는 orientation 뿐만 아니라 screenSize 까지 추가해 줘야 합니다. 두 옵션 사이에 “|” Vertical Bar 는 여러 옵션을 중복해서 적용할 때 사용하는 특수 문자입니다.
▼ 이제 화면을 전환해도 더 이상 Activity 가 재생성 되지 않습니다. 그림처럼 기존에 연결한 영상을 그대로 유지하기 위해서는 반드시 configChanges=”orientation|screenSize” 를 설정하는 것이 좋습니다.
▼ 그런데 configChanges 에서 재생성을 막을 경우 가로와 세로 레이아웃이 변경되지 않는 문제가 있습니다. 그러니까 land 폴더에 있는 가로 xml 이 가로로 화면을 전환해도 적용이 안되고 세로모드 xml 로 유지 된다는 것이죠. 이런 문제를 해결하기 위해 모드가 변경되었을 때 실행되는 함수 onConfigurationChanged() 를 Override 해서 다시 작성해야 합니다. Override/Implement 창에서 onConfigurationChanged() 을 클릭해서 함수를 생성합니다.
▼ 함수를 생성한 후 newConfig.orientation 를 분기문에 넣어서 가로와 세로를 구분합니다. 그리고 각 화면 별로 추가하고 삭제해야 할 내용을 이곳에 구현하시면 되겠죠.
'안드로이드 개발' 카테고리의 다른 글
로컬 레파지토리 sonatype nexus 설정해서 안드로이드 스튜디오 환경 구성하는 방법 (0) | 2019.10.09 |
---|---|
안드로이드 개발 SurfaceView에 카메라 영상 띄우는 방법 (0) | 2019.09.18 |
안드로이드 개발 앱에서 만든 DB 소스로 추출하는 방법 (0) | 2019.09.16 |
Wowza GoCoder 안드로이드, 아이폰 클라이언트 개발을 위한 라이선스 키 받는 방법 (1) | 2019.09.15 |
안드로이드 버전코드(versionCode), 버전이름(versionName) 차이와 조회하는 방법 (0) | 2019.09.14 |
안드로이드 개발 FragmentActivity 사용해서 화면 구성하는 방법 (0) | 2019.09.03 |
안드로이드 개발 에뮬레이터 타임아웃(Timeout) 오류 해결하는 방법 (0) | 2019.08.26 |
안드로이드 Android 디자인 참고 아이콘 Material design icon 다운받아 사용하기 (0) | 2019.08.05 |