program story

Fragment # setRetainInstance (boolean)를 사용하는 이유는 무엇입니까?

inputbox 2020. 11. 23. 08:06
반응형

Fragment # setRetainInstance (boolean)를 사용하는 이유는 무엇입니까?


Fragment # setRetainInstance (true) 혼란 스럽습니다. 다음은 Android Developer API 에서 추출한 Javadoc입니다 .

public void setRetainInstance (부울 보유)

프래그먼트 인스턴스가 활동 재 작성 (예 : 구성 변경)에서 유지되는지 여부를 제어합니다. 이것은 백 스택에없는 조각에만 사용할 수 있습니다. 설정된 경우 활동이 다시 생성 될 때 조각 수명주기가 약간 다릅니다.

  • onDestroy ()는 호출되지 않습니다 (그러나 조각이 현재 활동에서 분리되기 때문에 onDetach ()는 여전히 호출됩니다).
  • 조각이 다시 생성되지 않으므로 onCreate (Bundle)이 호출되지 않습니다.
  • onAttach (Activity) 및 onActivityCreated (Bundle) 계속 호출됩니다.

질문 : 개발자로서 어떻게 이것을 사용하며 왜 일을 더 쉽게하나요?


개발자로서 이것을 어떻게 사용합니까?

에게 전화하십시오 setRetainInstance(true). 나는 일반적으로 그것을 사용하는 onCreateView()또는 에서 수행 onActivityCreated()합니다.

그리고 왜 일을 더 쉽게 만들까요?

onRetainNonConfigurationInstance()구성 변경 (예 : 장치를 세로에서 가로로 회전)에 걸쳐 데이터 보존을 처리하는 것보다 더 간단한 경향이 있습니다 . 보존되지 않은 조각은 구성 변경시 파괴되고 다시 생성됩니다. 보유 된 조각은 아닙니다. 따라서 유지 된 조각이 보유한 모든 데이터는 구성 변경 후 작업에서 사용할 수 있습니다.


소켓과 같은 장기 실행 리소스를 열어 두는 데 매우 유용합니다. 블루투스 소켓에 대한 참조를 보유하는 UI가없는 프래그먼트가 있으면 사용자가 전화기를 뒤집을 때 다시 연결하는 것에 대해 걱정할 필요가 없습니다.

또한 비트 맵이나 서버 데이터처럼로드하는 데 시간이 오래 걸리는 리소스에 대한 참조를 유지하는데도 유용합니다. 한 번로드하고 유지 된 프래그먼트에 보관하고 활동이 다시로드 될 때 여전히 거기에 있으며 다시 빌드 할 필요가 없습니다.


이 답변을 매우 늦게 추가했지만 더 명확해질 것이라고 생각했습니다. 날 따라 말해. setRetainInstance가 다음과 같은 경우 :

그릇된

  • 구성 변경시 조각이 다시 생성됩니다. 새로운 인스턴스가 생성됩니다.
  • onCreate () 및 onDestroy ()를 포함한 모든 수명주기 메서드는 구성 변경시 호출됩니다.

진실

  • 구성 변경시 조각이 다시 생성되지 않습니다. 동일한 인스턴스가 사용됩니다.
  • 모든 수명주기 메서드는 구성 변경, APART FROM onCreate () 및 onDestroy ()에서 호출됩니다.
  • 인스턴스 유지는 백 스택에 추가 될 때 작동하지 않습니다.

위의 내용이 DialogFragments와 Fragments에 적용된다는 것을 잊지 마십시오.

참고 URL : https://stackoverflow.com/questions/11160412/why-use-fragmentsetretaininstanceboolean

반응형