안드로이드
onRetainnonconfigurationinstance getlastnonconfigurationinstance
raulyo
2012. 8. 1. 10:33
참고 : 안드로이드펍 안떠니 님의 글( http://www.androidpub.com/?mid=android_dev_info&category=127161&document_srl=742429 )
침묵님의
블로그 ( http://silence2.tistory.com/entry/Faster-Screen-Orientation-Change )
안드로이드(android)
프로그래밍을 하다 안사실이지만 엑티비티는 으외로 생명주기가 짧습니다 -_-;
( 2.1 이하버전일때 )
아직 2.2sdk를 만저보지
않아서 2.2 에서는 어떤지 모르겠네요.
|
1. 시도 때도 없이 엑티비티는 재시작 된다. |
일단 안드로이드에서 가로세로 전환과 쿼티자판( 다른 키보드라도 )을 열었을때 엑티비티가 재시작 됩니다.
이 소리는 다른 말로해서 껐다 켜나 같은 현상이라는 소리조 -_-;
아니야!!!! 그건 현실이 아닐꺼야!!!
머 설명에 따르면 화면을 다시구성하기 위해서라나 머라나.
하지만 핸드폰을 돌릴때 마다 프로그램이 재시작 되면 어디 불편해서 쓰겠나 -_-;;;
그래서 화면 전환이 필요없다면 아에 돌리는걸 막는 방법도 있긴 합니다 ㅎㅎㅎ
하지만 그렇지 않은 경우가 더 많잔아!!!!!
|
2. 그는 차캐습니다. |
당연한 것이 겠지만 이것에 대한 예방책은 안드로이드에 있습니다.
어디다가라도 데이터를 저장해두었다가 온크래디트에서 불러오면 되지 ㅋ
하지만 너무 번거롭다!!!!
그래서 우리의 안선생님이 말씀하셨습니다.
어디다가라도 데이터를 저장해두었다가 온크래디트에서 불러오면 되지 ㅋ
하지만 너무 번거롭다!!!!
그래서 우리의 안선생님이 말씀하셨습니다.
"onRetainNonConfigurationInstance" 를 쓰거라
오....오오오오오오오오!!!!!!!
|
3. onRetainNonConfigurationInstance 하고 getLastNonConfigurationInstance 하고~ |
이 인터페이스를 이용해 필요한 내용들을 저장하고 온크래디트에서 불러올수 있습니다.
onRetainNonConfigurationInstance는 저장할때 getLastNonConfigurationInstance는 불러올때 사용되며 엑티비티가 죽을때 onRetainNonConfigurationInstance를 호출할 필요없이 죽을때 알아서 실행됩니다.
|
4. Object onRetainNonConfigurationInstance |
저장해야 할 내용들을 여기에 서 저장하여 리턴하면 getLastNonConfigurationInstance를 통해 불러올수
있습니다.
여러개를 저장가능 한지는 모르겠는데 저는 어차피 편의상 저장용 클래스(claActivityBackup)를 하나 만들었습니다.....
(이 방법이 여러가지 면으로 편하저)
여러개를 저장가능 한지는 모르겠는데 저는 어차피 편의상 저장용 클래스(claActivityBackup)를 하나 만들었습니다.....
(이 방법이 여러가지 면으로 편하저)
1 2 3 4 5 6 7 8 9 10 11 |
@Overridepublic Object onRetainNonConfigurationInstance() { //화면전환시 저장되있어야 하는 내용을 저장하기위한 클래스 claActivityBackup insAB = new claActivityBackup(); //DB관리클래스 저장 insAB.alData = (ArrayList)alData.clone(); insAB.intA = 1 ; return insAB; } |
이렇게 하면 됩니다.
마지막에 리턴하는 객체가 저장되어 엑티비티가 재시작하여도 불러다 쓸수 있는 데이터가
되저.
이코드에서 주의할 점은
insAB.alData =
(ArrayList
이것 입니다.
객체를 저장할때 클론을 이용하여 객체를 저장하지
않으면 메모리상의 주소만 남기때문에 null이나 쓰래기 값이 들어가게 됩니다.
이런 원리로 말이조.
|
5. getLastNonConfigurationInstance |
1 2 3 4 5 6 7 8 |
final Object objBackupData = getLastNonConfigurationInstance(); //저장되있는 데이터가 있는지? if ( objBackupData != null ) { //있다면 claActivityBackup insAB = (claActivityBackup)objBackupData; this .intA = insAB.intA; this .alData = insAB.alData.clone(); } |
여기서도 마찬가지로 객체는 클론으로 받아와야 예상치못한 동작을 막을수 있습니다.