15

FragmentActivity.onResume() javadoc:사이의 차이)에 대한 단편

디스패치 onResume(). 이전 버전의 플랫폼과의보다 나은 상호 작용을 위해이 호출 시점에서 활동에 첨부 된 조각은 다시 시작되지 않습니다. 즉, 경우에 따라 상태를 수정하는 조각 트랜잭션을 허용하지 않고 이전 상태가 여전히 저장 될 수 있습니다. 적절한 상태의 프래그먼트와 올바르게 상호 작용하려면 onResumeFragments()를 대체해야합니다. FragmentActivity.onResumeFragments() javadoc:

당신은 그것의 파편이 재개되는 것과 동일한 지점에서 작업에 작업을 수행 할 재정의 할 수 있습니다 onResume의 조각 지향 버전()입니다. 수퍼 클래스에 항상 전화해야합니다.

위의 의미 하는가 그 보장하는 플랫폼 :

  • 조각이 결코이 재개 될 것입니다 (그 onResume() 호출되지) FragmentActivity.onResume()
  • 을 실행하는 동안
  • 조각이 항상 입니다 FragmentActivity.onResumeFragments()을 실행하는 동안이 다시 시작될 것입니다 (해당 onResume()이 호출됩니까?

그렇지 않은 경우 개발자는 어떻게 위와 관련하여 올바르게 올바르게 활용하고 경계 할 수 있습니까?

+0

나는 인스턴스 상태가 원인 _IllegalStateException을 저장 한 후 onResume'내부 조각 트랜잭션을 수행하는()'사실을 발견했다. 그런 다음'FragmentActivity.onResume()'에 대한 문서에서 정확히 설명합니다. – Piovezan

답변

13

onResume()?

예, 여전히 Activity.onResume()과 동일한 컨텍스트가 호출됩니다 (예 : Activity.onResume()). FragmentActivity.onResumeFragments()을 재정의하더라도 (을 알고있는 FragmentActivity의 추가 방법).

onResume()onResumeFragments()의 차이점은 무엇입니까?

FragmentActivity.onResumeFragments()는 같은 행에 FragmentActivity 콜백 인 Fragments는 그것이 Activity이 재개 될 때 과 동일하지 않다 재개되는 경우 포함.

이것은 조각이 다시 시작되는 지점에서 활동을 수행하기 위해 재정의 할 수있는 onResume()의 단편 지향 버전입니다. 수퍼 클래스에 항상 전화해야합니다.

어떤 방법을 사용해야합니까?

당신이 지원-V4 라이브러리와 FragmentActivity를 사용하는 경우, 항상 FragmentActivity 구현에 onResumeFragments() 대신 onResume()를 사용하려고합니다.

FragmentActivity#onResume() documentation :

가 제대로 자신의 적절한 상태에서 조각과 상호 작용하려면, 대신) (onResumeFragments를 오버라이드 (override) 할 필요가 있습니다.

차이는 미묘하다, https://github.com/xxv/android-lifecycle/issues/8를 참조하십시오

onResume()를 정상 활동의 및 onResumeFragments을 위해 사용되어야한다()는 V4의 compat 라이브러리를 사용하는 경우. 응용 프로그램이 FragmentManager가 초기 FragmentTransaction을 완료하기를 기다리는 경우에만 필요합니다. 그것을 내부`onResumeFragments을하지()`않습니다 수행하는 동안 onSaveInstanceState_ 후이 작업을 수행 할 수 없습니다 :

+1

소스에서 볼 수 있듯이'onResume()'은'FragmentActivity'에서 재정의 (override)를 가지므로'Activity'와 같은 버전이 아닙니다. 그러나,'onResumeFragments()'가'onPostResume()'에서 호출된다는 사실을'FragmentActvity'의 소스에서 알았 기 때문에'onResume()'이후에 호출되는 것이 확실합니다. 이상적으로, 나는'onResume()'과 반대로'onResumeFragments()'를 사용하거나 내 가정을 확증하는 대답을 받아 들일 것이다. – nekojsi

+1

네 말이 맞아. 간단히 말하자면, support-v4 라이브러리를 사용한다면, onResume() 대신에 항상 onResumeFragments()를 사용하십시오. 차이점은 미묘합니다. https://github.com/xxv/android-lifecycle/issues/8 – shkschneider

+0

감사. 답변을 업데이트 할 수 있습니까? (링크가 특히 유용합니다) 받아 들일 수 있습니까? – nekojsi

관련 문제