반응형
1. Information
먼저 Developer 의 내용을 간단히 정리해주세요.
네, Developer가 Reference Doc 이니, 닥디 ( 닥치고 디벨로퍼 ) 부터 시작하겠습니다.
- Activity 가 스스로 handling 할 환경 변화 ( Config Changes ) 를 나열해 주는 곳입니다.
- Runtime 시 환경 변화가 일어나면, 기본동작은 activity가 종료되고 재시작되는 것입니다.
- 하지만, android:configChanges 에 값을 주면 환경변화가 되어도 activity가 restart 되는 것을 막을 수 있습니다.
- 이 때 activity의 onConfigurationChanged() 함수가 대신 호출됩니다.
<주의사항>
이 attribute 설정은 최후의 수단으로서 선택되어야 하며, 평소에는 이 값을 설정하는 것은 지양되어야 합니다. 환경 변화에 따른 재시작을 어떻게 더 합리적으로 처리할지에 대한 더 자세한 정보는 Handling Runtim Changes 를 읽어보세요.
이런 특징을 가지고 있는 Activity Tag 의 Attribute 입니다.
이 설명만 가지고는 정확히 감이 안 오는데, 예제 좀 들어주세요
예. 감이 안 올 때는 예제가 최고입니다.
android:configChanges 값이 아무것도 없을 때는 단말을 돌려서 단말 표시 모드가 portrait mode -> landscape mode 가 되면 위에서 설명된 것과 같이 기본 동작은 Activity 가 destroy 되었다가 다시 시작합니다.
android:configChanges = "orientation" 이 설정되면, portrait mode -> landscape mode 가 되어도, Activity는 destroy 되지 않습니다. 대신에 Activity에 override 된 onConfigurationChanged() 함수가 호출되며, 여기서 환경변화 ( config changes ) 에 대한 처리를 해줍니다.
[Portrait mode 와 Landscape mode가 뭔가요?]
이거 그냥 Activity 가 재시작되도록 둬도 될 것 같은데.. 왜, 언제 사용해요?
가장 흔하게 접할 수 있는 경우가 위에서 예를 든 orientation changes 경우입니다.
마찬가지로 흔하게 접할 수 있는 것이 keyboardHidden 입니다.
keyboardHidden 은 hardware keyboard가 보이냐 안 보이냐에 따라서 발생하는 변화입니다.
가장 대표적인 hardware keyboard를 갖춘 device인 옵티머스 Q를 보면, 슬라이드 형식으로 QWERTY 자판을 꺼냈다 숨겼다 할 수 있죠.
이 때 변화가 없어도 되는데 쓸데 없이 Activity 가 파괴되고 생성되면 안 되겠죠? 그래서 QWERTY 자판이 있을 경우는 거의 대부분 이 attribute 설정이 필요하게 됩니다.
그 외에도 configChanges 가 발생했을 때 단순한 Activity의 재시작 이외에 추가적 작업을 해 줄 때에도 사용됩니다.
그럼 configChanges에 들어갈 수 있는 값들은 뭐가 있나요?
먼저 configChanges에는 여러가지 값들을 '|' ( or ) 구분자를 통해서 함께 입력 가능합니다.
Value | Description |
"mcc" | SIM 이 Detect 되고 MCC 가 Update 될 경우. ( IMSI Mobile Country Code가 변했을 때 ) |
"mnc" | SIM 이 Detect 되고 MNC 가 Update 될 경우. ( IMSI Mobile Network Code가 변했을 때 ) |
"locale" | User 가 새로운 Language 를 선택했을 때 ( Locale 이 변경될 때 ) |
"touchscreen" | Touch Screen Hardware 가 바뀌었을 때 ( 보통은 절대 일어나지 않는 Case 임 ) |
"keyboard" | User 가 External Keyboard를 꽂았을 때를 비롯하여 Keyboard 의 Type 변경시. |
"keyboardHidden" | User 가 Hardware Keyboard를 보이고 감추는 등의 Keyboard의 Accessibility가 변경되었을 때 |
"navigation" | Navigation Type ( 트랙볼 / DPad ) 가 변경되었을 때 ( 보통 절대 일어나지 않는 Case ) |
"orientation" | User가 Device 를 돌리는 등의 행위로 Screen 의 Orientation 이 변경되었을 경우. |
"screenLayout" | Screen의 Layout이 변했을 때, 다른 Display 가 Activate 되었을 경우 Layout이 변한 경우 |
"fontScale" | User 가 새로운 Font Size 를 선택했을 때. |
"uiMode" | User 가 Device 를 Desk 나 Car Dock 등에 비치하여 Interface Mode 를 바꾸었을 때. |
[ IMSI, MCC, MNC, Car Dock의 의미]
2. Summary
- Manifest의 Activity Tag Attribute 는 다음과 같은 특징을 갖는다.
Activity 가 스스로 handling 할 환경 변화 ( Config Changes ) 를 나열해 주는 곳입니다.
Runtime 시 환경 변화가 일어나면, 기본동작은 activity가 종료되고 재시작되는 것입니다.
하지만, android:configChanges 에 값을 주면 환경변화가 되어도 activity가 restart 되는 것을 막을 수 있습니다.
이 때 activity의 onConfigurationChanged() 함수가 대신 호출됩니다.
- configChanges 에 assign 되는 값들은 '|' 구분자를 통해 여러 value 를 함께 입력 가능합니다.
configChanges 에 들어갈 수 있는 값들은 다음과 같습니다.
"mcc" / "mnc" / "locale" / "touchScreen" / "keyboard" / "keyboardHidden" / "navigation" / "orientation" / "screenLayout" / "fonrScale" / "uiMode"
3. References
- http://developer.android.com/guide/topics/manifest/activity-element.html#config
Android Developer Doc. Manifest의 Activity Tag attribute configChanges.
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] LayoutInflater와 Inflate 에 대해 알아보아요. (22) | 2012.01.23 |
---|---|
[Android/안드로이드] Manifest Activity 의 속성 exported에 대해 알아보아요. (0) | 2012.01.23 |
[Android/안드로이드] Android Developer AsyncTask 파트 번역본입니다. (4) | 2012.01.20 |
[Android/안드로이드] 예제를 통해 배우는 AsyncTask. 함께 배워보아요. (5) | 2012.01.20 |
[Android/안드로이드] 쉽게 사용하는 Thread와 Handler. AsyncTask class 를 통해 해보아요~ (개념) (9) | 2012.01.19 |
댓글