2011-06-15 3 views
4

단일 플레이어에서 앱을 사용하는 동안 대량의 데이터를 추적 할 가능성이있는 앱을 보유하고 있으며 내 앱에서 한 번에 최대 5 명의 플레이어를 허용 할 수 있습니다. 이는 많은 양의 데이터가 잠재적으로 배가된다는 의미입니다. 시간 5.onRetainNonConfigurationInstance를 사용하는 대안

활동이 파괴되면 모든 SQLite 데이터베이스에 데이터를 쓰고 정상적으로 작동합니다.

방향 변경 중에 문제가 발생합니다. 나는 오리엔테이션 변경을 위해 적어도 의존 할 수 있다고 생각했기 때문에 onRetainNonConfigurationInstance를 사용했지만, 안드로이드 내에서 진행되는 다른 것들이 내 데이터를 지울 수 있다는 것을 발견했습니다. 사용자들에 의해보고 된 몇 가지 예 :

- While the app was running, the user took a phone call. After returning to the app, the data was gone. 
- While the app was running, another user downloaded an update to a different app from the Market, and found the data gone after returning to the app. 
- While the app was running, another user started a different app (a music player), and returned to find the data gone. 

내 응용 프로그램이 처음에 번들로 각 선수에 대한 각각의 데이터 필드를 썼다 때문에 onRetainNonConfigurationInstance의 사용은 문제가 있음을 알고, 앱은 그런 식으로, 어떤 문제를 구현하면서 여러 달 동안 겪었습니다.

onRetainNonConfigurationInstance에 대해 알게되고 구현에 사용하자 마자 불만이 접수되기 시작했습니다.

구현이 간단합니다. 다음과 같이 내가 구현 :

몇 가지 근본적인 문제가 나타납니다 때문에
mPlayers = (PlayerData [])getLastNonConfigurationInstance(); 

이 화면에서 사용자 많은 양의 데이터를 유지하기위한 가장 좋은 대안 무엇 :

@Override 
public Object onRetainNonConfigurationInstance() 
{ 
    return mPlayers; //array of player objects 
} 

을 다음에서 onCreate에, 나는 이렇게 회전?

어떤 도움을 주셔서 감사합니다!

답변

4

번들 사용 : onRetainNonConfigurationInstance의 문제는 앱 프로세스의 수명주기와 관련이 있으며, 프로세스가 완전히 종료 되더라도 번들을 저장하고 복원 할 수 있다는 것입니다.

사람들이 죽어 가고 프로세스가 중단 될 수있는 메모리 집약적 인 작업을 수행하려는 경우 번들로 이동하십시오.

+0

감사합니다. 질문에 조금 더 추가하겠습니다. 번들이 더 나은 선택이라고 생각했지만 앞으로 나아갈 수있는 최적의 방법은 무엇입니까? 예를 들어 내가 보유하고자하는 100 개의 문자열이 있다고 가정 해 봅시다. 번들에 길이가 다른 100 개의 개별 문자열을 넣는 것이 좋습니까? 또는 일종의 번들 확장을 구현해야합니까? 아니면 이러한 조건에서 더 잘 작동 할 수있는 것이 있습니까? – Michael

+0

The Bundle은 String을 포함한 대부분의 프리미티브에 대한 배열 및 ArrayLists를 취합니다. 게으름을 피우다가 과거에 한 일은 기본적으로 원하는 비트와 조각으로 JSON 객체를 만든 다음 번들로 직렬화하는 것입니다. 반대편에서 비 직렬화하면 갈 수 있습니다. – Femi

+0

감사합니다. Femi,이 시도해 보겠습니다. – Michael