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

[android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아.

by 돼지왕 왕돼지 2016. 10. 12.
반응형

 [android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아.


activity, asyctask, configchanges, configuration change, CONTEXT, control, CREATE, deprecate, Design Pattern, Destroy, dock 연결, font 크기, fragment, Framgment, getLastNonConfigurationInstance, Good, Honeycomb, life cycle, lifecycle, manifest, Method, onattach, onCreate, oncreateview, ondetach, onRetainNonConfigurationInstance, Orientation, recreate, setretaininstance, state, True, [android] Fragment 와 함께라면 Configuration Change 가 무섭지 않아., 리소스, 메모리 관리, 언어, 언어 변경


-

애석하게도 대부분의 개발자들이 manifest 에 configChanges 속성을 통해 orientation 값만 설정해주면 모든게 해결되는 줄 안다.
하지만 그렇지 않다.
Configuration Change 는 여러 경우에 발생된다.
기본적으로 configChanges 에 들어가는 값들의 상황이 그렇고,
언어가 변경되거나, dock 에 연결되거나, font 크기가 바뀌거나 등의 조건으로 destroy-recreate 되곤 한다.

또한 리소스, 메모리 관리 측면에서 Activity 가 destroy 되고 create 되도록 하는 것이 좋다.


-
예전부터 개발을 해온 사람이라면 Activity 에 onRetainNonConfigurationInstance() 가 있잖아? 라고 말할 수 있겠지만,
해당 method는 HoneyComb 부터 deprecated 되었다.
덧붙여 getLastNonConfigurationInstance() 도..


-
그럼 이제 상태보관은 어떻게 할까?
Framgment 로 옮겨졌다. ( fragment 를 사용을 확고한 design pattern 으로 만들려는듯 하다. )


-
Configuration 이 변경될 때 Frgment 를 담는 Activity 는 lifecycle 을 그대로 타고,
Fragment 에 setRetainInstance( true )를 통해 Fragment 는 onDetach, onAttach 등의 life cycle 만 진행된다.
따라서 Activity 는 Control 만 주관하고, 모든 일은 Fragment 가 처리하도록 하면 state 유지에 문제가 없고,
만약에 AsyncTask 등이 Context 를 필요로 하지 않는다면, 상황이 Good.
만약 Context 를 사용한다면 Fragment 에서 activity 에 onAttach 가 되었는지 확인하여 적절한 조치를 취해주면 되겠다.


참고 : setRetainInstance( true ) 가 아닌경우는 onAttach() -> onCreate() -> onCreateView() 의 lifecycle 을 타며,
setRetainInstance( true ) 일 경우는 onAttach(), onCreateView() 만 탄다.


참조 : http://www.androiddesignpatterns.com/page2/





반응형

댓글