2011-02-25 3 views
1

AsyncTask을 사용하는 XML 파일을로드하는 애플리케이션 Activity이 있습니다. XML은 ArrayList으로 파싱됩니다. 다른 활동으로 전환 한 다음 주 활동으로 돌아 가면 해당 XML 파일이 이미로드되어 있고 채워진 ArrayList을 사용할 수 있기를 원합니다.Android 활동 데이터 유지 관리 : onPause, onSaveInstanceState, onRetainNonConfigurationInstance

그걸 유지하는 가장 좋은 방법은 무엇입니까 ArrayList?

onSaveInstanceState은 프리미티브만을 지원하는 것으로 보이며 실제로 onRetainNonConfigurationInstance이 호출되는 경우를 설정할 수 없었습니다. 따라서 onCreate에서 XML 데이터는 서버에서로드 될 때마다 Activity으로 전환됩니다. ArrayList에있는 모델을 Parcelable으로 구현 했으므로 어떤 방식 으로든 사용할 수 있습니까?

답변

3

해당 ArrayList를 유지하는 가장 좋은 방법은 무엇입니까?

문제가 여러 활동과 관련이있는 부분이 보이지 않습니다. 예를 들어 사용자가 HOME (헐떡 거림!)을 누르면 어떻게됩니까? 앱이 결국 닫힙니다. 서버에서 데이터를 다시로드 하시겠습니까? 대답이 "예"이면 아무 것도 "유지"할 필요가 없으며 이면 충분합니다 (아래 참조). 대답이 "아니오"이면 데이터 모델에 대한 접근 방식을 다시 생각해야하므로 데이터를 데이터베이스에 보관하고 웹 서비스와 주기적으로 동기화하고 ArrayList을 버리고 Cursor으로 바꿀 수 있습니다.

는 onSaveInstanceState 만하면, 내 집의 질문에 대한 대답이 "예", 당신은 당신의 활동 데이터 멤버의 데이터에 저장할 수있는 경우

프리미티브를 지원하는 것, 그리고 알맞은 크기이며, Bundle에 붙이십시오. onSaveInstanceState(). BundleArrayListParcelable으로 유지할 수 있습니다. 그러나 데이터 세트가 큰 경우 (예 : 100KB 이상)이 경로를 사용하지 않으려하고 위에서 설명한 "no"경로를 고려해야합니다.

onRetainNonConfigurationInstance가 실제로 호출되는 경우를 설정할 수 없었습니다.

화면을 회전합니다. 다른 시나리오가 있지만 방향 변경이 가장 쉬운 방법입니다.

그러나 문제는 아무 관련이 없습니다.

1

은 그들이 직렬화 선언으로, onSaveInstanceState 개체를 지원

"onSaveInstanceState에만 프리미티브를 지원하는 것 같습니다."

// ON_SAVE_INSTANCE_STATE 
// save instance data (5) on soft kill such as user changing phone orientation 
protected void onSaveInstanceState(Bundle outState){ 
    password= editTextPassword.getText().toString(); 
    try { 
     ConfuseTextStateBuilder b= ConfuseTextState.getBuilder(); 
     b.setIsShowCharCount(isShowCharCount); 
     b.setTimeExpire(timeExpire); 
     b.setTimeoutType(timeoutType); 
     b.setIsValidKey(isValidKey); 
     b.setPassword(password); 
     state= b.build(); // may throw 
    } 
    catch(InvalidParameterException e){ 
     Log.d(TAG,"FailedToSaveState",e); // will be stripped out of runtime 
    } 
    outState.putSerializable("jalcomputing.confusetext.ConfuseTextState", state); // save non view state 
    super.onSaveInstanceState(outState); // save view state 
    //Log.d(TAG,"onSaveInstance"); 
} 
관련 문제