본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Manifest Activity 의 속성 ConfigChanges 에 대해 알아보아요.

by 돼지왕 왕돼지 2012. 1. 23.
반응형



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.




반응형

댓글