programing

회전 후 onCreate () Fragment가 onCreate () FragmentActivity 전에 호출됩니다.

procenter 2021. 1. 14. 23:19
반응형

회전 후 onCreate () Fragment가 onCreate () FragmentActivity 전에 호출됩니다.


FragmentActivity 및 Fragments를 사용하고 있습니다.

응용 프로그램이 시작되면 :

FragmentActivity onCreate() <------
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onAttach()
Fragment onCreate() <------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
Fragment onResume()

모든 것이 정상이며 FragmentActivity onCreate ()가 Fragment onCreate () 전에 호출됩니다. 그리고 회전 할 때 :

Fragment onPause()
FragmentActivity onPause()
Fragment onStop()
FragmentActivity onStop()
Fragment onDestroyView()
Fragment onDestroy()
Fragment onDetach()
FragmentActivity onDestroy()
---
Fragment onAttach()
Fragment onCreate() <----------
FragmentActivity onCreate() <---------
Fragment onCreateView()
Fragment onActivityCreated()
Fragment onStart()
FragmentActivity onStart()
FragmentActivity onResume()
Fragment onResume()

Fragment onCreate ()는 FragmentActivity onCreate ()보다 먼저 호출됩니다. 일관성이없는 이유는 무엇입니까?

FragmentActivity onCreate ()에서 저는 Fragment onCreate ()가 가져 오는 데이터를 생성합니다. 그 이상한 행동 때문에 나는 내 데이터가 이전에 생성되었는지 확인하기 위해 내 코드를 Fragment onCreate ()에서 Fragment onCreateView ()로 옮겨야했습니다.

FragmentStatePagerAdapter를 사용하여 Fragment를 보유하고 있는데 그게 이유일까요?


onActivityCreated()Fragment의 수명주기에서 호출 될 때까지 유효한 활동에 의존해서는 안됩니다 .

프래그먼트의 활동이 생성되고이 프래그먼트의 뷰 계층이 인스턴스화 될 때 호출됩니다. 뷰 검색 또는 상태 복원과 같이 이러한 조각이 제자리에 있으면 최종 초기화를 수행하는 데 사용할 수 있습니다.

재 구축 순서가 선형이 아닌 정확한 이유는 말할 수 없습니다. 엄격한 순서를 강요하는 것보다 각 구성 요소가 자체 속도로 다시 시작되도록하는 것이 더 효율적일 수 있습니다. 예를 들어, 저는 제 LoaderManager가 가능한 한 빨리 시작하는 것을 선호하며 나중에 콘텐츠의 레이아웃에 대해 걱정할 것 입니다.

(좋은 다이어그램을 좋아합니다.)

여기에 이미지 설명 입력


조각은 활동의 onCreate(). 하지만 중요한 것은 기본 Activity 클래스의 onCreate(). 따라서 먼저 호출 super.onCreate()하면 나머지 onCreate()메서드는 프래그먼트가 복원 된 후 실행됩니다.

한 가지 가능한 해결책은 상태를 복원하거나 호출하기 전에 Fragment에 필요한 데이터를 계산하는 것입니다.super.onCreate()

수명주기는 다음과 같습니다.

ACTIVITY onCreate (pre-super)
FRAGMENT onAttach
ACTIVITY onCreate (post-super)

따라서 다음과 같이하십시오.

@Override
public void onCreate( final Bundle savedInstanceState )
{
    Log.d( TAG, "ACTIVITY onCreate (pre-super)" );
    // Do your processing here
    super.onCreate( savedInstanceState ); // Fragments will be restored here
    Log.d( TAG, "ACTIVITY onCreate (post-super)" );
}

참조 URL : https://stackoverflow.com/questions/14093438/after-the-rotate-oncreate-fragment-is-called-before-oncreate-fragmentactivi

반응형