2012-07-14 7 views
6

데이터를 저장하는 데 사용하는 Singleton Data 클래스가 있습니다. 다른 Fragment에서 액세스하고 있습니다.싱글 톤을 사용하는 OnSaveInstanceState

첫 번째 Fragment이로드되면 싱글 톤의 모든 입력란은 null입니다. 두 번째 Fragment이 표시되면이 필드에 따라 데이터가 표시됩니다. 첫 번째 Fragment은 이러한 필드가 초기화되도록합니다. 사용자가 두 번째 Fragment에서 홈 버튼을 누르면, 이후 한 시간과 같이 다시 열립니다 그러나

, 싱글 톤은 모든 데이터를 잃은하고 Fragmentnull 필드에 액세스하려고합니다.

onSaveInstanceState 메서드를 구현하고 싶었지만 어떻게 작동하는지 잘 모르겠습니다. 할당 할 데이터의 인스턴스가 없습니다.

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putSerializable("DATA", Data.getInstance()); 
} 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    savedInstanceState.getSerializable("DATA"); //What to do with this? 
} 

도움이됩니다.

+0

: 당신이 다음 할 수있는 당신의 조각 ... 그렇지 않으면

((MyActivityClass)getActivity()).getSharedState() 

, 당신은 당신의 싱글 톤 객체 직렬화 및 역 직렬화 할 수있는 구성원 개체를 관리 할 수 ​​있습니다 그러나 왜 싱글 톤이 모든 데이터를 잃을 지 이해할 수는 없습니까? 응용 프로그램이 백그라운드에서 계속 실행되고 있습니까? 그렇지 않습니다. 내 응용 프로그램에서 동일한 패러다임을 사용하고이 데이터 손실을 보지 못했습니다. – Aviral

+0

이 문제가 발생했습니다. – nhaarman

+0

흥미 롭습니다! 싱글 톤의 데이터가 왜 사라지는지 알고 싶다면 게시하십시오. 이것은 나를 염려하게한다. 감사. – Aviral

답변

1

조각이 모두 동일한 활동에 호스팅되어 있습니까? 그렇다면 공유 상태를 활동 구성원에 저장하고 활동의 onSaveInstanceState() 및 onCreate()를 사용하여 저장 및 복원하십시오.

MySingleton.instance().saveTo(outState); 
MySingleton.instance().restoreFrom(savedInstanceState); 
MySingleton.instance().getState(); 

public void restoreFrom(Bundle savedInstanceState) { 
    mState = savedInstanceState.getSerializable("DATA"); 
} 
+0

성능상의 이유로 Parcable을 사용하는 것이 더 좋습니다. – Roel

0

this을 살펴보십시오. onSaveInstanceState 메서드는 큰 개체를 운반해야하는 경우에는 사용하지 않는 것이 좋습니다.

관련 문제