참고 : 안드로이드펍 안떠니 님의 글( 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 하고~ |
|
4. Object onRetainNonConfigurationInstance |
@Overridepublic Object onRetainNonConfigurationInstance() { //화면전환시 저장되있어야 하는 내용을 저장하기위한 클래스 claActivityBackup insAB = new claActivityBackup(); //DB관리클래스 저장 insAB.alData = (ArrayList)alData.clone(); insAB.intA = 1; return insAB; }
이렇게 하면 됩니다. 여기서도 마찬가지로 객체는 클론으로 받아와야 예상치 못한 동작을 막을 수 있습니다.
마지막에 리턴하는 객체가 저장되어 엑티비티가 재시작하여도 불러다 쓸 수 있는 데이터가 되죠.
이 코드에서 주의할 점은
insAB.alData = (ArrayList
이것입니다.
객체를 저장할 때 클론을 이용하여 객체를 저장하지 않으면 메모리상의 주소만 남기 때문에 null이나 쓰레기 값이 들어가게 됩니다.
이런 원리로 말이죠.
이 인터페이스는 보통 온크래디트에서 불러와 엑티비티에 데이터를 전달합니다.
5. getLastNonConfigurationInstance final Object objBackupData = getLastNonConfigurationInstance();
//저장되있는 데이터가 있는지?
if( objBackupData != null )
{
//있다면
claActivityBackup insAB = (claActivityBackup)objBackupData;
this.intA = insAB.intA; this.alData = insAB.alData.clone();
}