2017-02-06 3 views
0

setRetainInstance(true)을 통해 상태를 저장하는 조각이 있습니다. - 내 mData 갑자기 null된다 NullPointerExceptionOS가 죽인 활동 후에 savedStstState가 null이 아닙니다.

public class MyFragment extends Fragment { 
    private SomeData mData; 

    public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     if (savedInstanceState == null) { 
     mData = new SomeData(getView()); 
     } else { 
     mData.refresh(getView()); 
     } 
     // More awesome code 
    } 
    } 
} 

때로는 응용 프로그램 충돌이 내 조각의 매우 단순화 된 코드입니다. 이것은 애플리케이션을 접고 잠시 후 돌아올 때 발생합니다.

일부 이론이 있습니다. 얼마 후 OS가 ActivityFragment을 죽입니다 (setRetainInstance (true)에도 불구하고). 따라서 내 조각의 새 객체를 생성합니다. 으로 초기화 된 mData입니다. 그러나 savedInstanseState은 null과 같지 않습니다. 따라서 새로운 조각은 초기화를 건너 뛰고 null 참조에서 refresh(View)을 호출하려고 시도합니다.

내 질문 : OS가 활동 (응용 프로그램이 아닌 화면) 및 다시 복귀 후 사망 할 때 은 무엇 내 조각의 onActivityCreated(savedInstanceState) 방법에 savedInstanseState 변수를 포함 할 것인가? 답 확실하지

답변

0

완전히하지만 여기 내가

setRetainInstance을 (부울 유지) 제어 조각 인스턴스 는 이러한 구성 변화로부터으로 (활동 재 작성에 대해 유지 여부를 추측 할 수 무엇입니까). 이것은 백 스택에없는 조각에만 사용할 수 있습니다.

그래서 난 당신이 활동을 접을 때 뷰가 파괴 얻을 및 인스턴스 데이터 (setReetainInstance 값) 번들에 저장하고 있다고 생각 (savedInstanceState 만들기! =로드하는 동안 널 (null)). 그러나 이전에 retainInstance가 true로 설정된 이후로 액티비티를로드하면 onCreate()가 호출되지 않고 savedInstanceState! = null 및 mData == null이므로 오류가 발생합니다.