[android] fragment lifecycle

sundays·2023년 3월 27일
0

android

목록 보기
18/18
post-custom-banner

fragment

onCreate()

public void onCreate(@Nullable Bundle savedInstanceState) {
	mCalled = true;
	restoreChildFragmentState(savedInstanceState);
	if (!mChildFragmentManager.isStateAtLeast(Fragment.CREATED)) {
		mChildFragmentManager.dispatchCreate();
	}
}
  • fragment만 create된 상황으로 fragment view가 생성되지 않은 상태
  • 이전에 onAttach() 가 먼저 호출된다

onCreateView()

public View onCreateView(@NonNull LayoutInflater inflater,
		@Nullable ViewGroup container,
		@Nullable Bundle savedInstanceState) {
	if (mContentLayoutId != 0) {
		return inflater.inflate(mContentLayoutId, container, false);
	}
	return null;
}
  • createView() 를 재정의 하여 fragment view를 직접 생성하거나 재정의 없이 바로 callback되는 onViewCreated 에서 설정해도 됩니다.

onViewCreated()

public void onViewCreated(@NonNull View view,
		@Nullable Bundle savedInstanceState) {
}
  • Lifecycle이 INITIALIZED 상태
  • view 초기값 설정
  • LiveData Observe
  • RecyclerView 또는 ViewPager Adapter 세팅

onViewStateRestored()

public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
	mCalled = true;
}
  • 저장해준 state 값이 fragment 의 view계층 구조에 복원 되었을때 호출
  • 뷰의 상태 값을 체크 할 수 있습니다
  • Lifecycle이 CREATED 상태

onStart()

public void onStart() { mCalled = true; }
  • fragment가 사용자에게 보여질 수 있을때 호출됩니다
  • 이 시점 부터 fragmnet 의 child FragmentManager 를 통해 FragmentTransaction 을 수행
  • Lifecycle이 STARTED 상태

onResume()

public void onResume() { mCalled = true; }
  • fragment와 사용자가 상호작용할 수 있을때 호출됨
  • onResume() 이 호출되지 않은 경우에는 I/O 작업이 불가능하다

onPause()

public void onPause() { mCalled = true; }
  • 사용자가 fragment를 떠나고 있지만 fragment가 아직 노출되었을때
  • Lifecycle 이 PAUSE가 아닌 STARTED 가 된다

onStop()

public void onStop() { mCalled = true; }
  • fragment가 더 이상 화면에 보여지지 않게 되면 fragment와 view의 lifecycle이 CREATED 상태가 되고 onStop() 이 호출
  • 부모 activity 또는 fragment가 중단 또는 상태가 저장될때도 호출
  • 28버전 이후로 onStop() 와 onSaveInstanceState() 가 바뀌었습니다

onDestroyView()

public void onDestroyView() { mCalled = true; }
  • exit animaition 과 transaction 이 완료되고 fragment가 화면으로부터 벗어난 경우
  • Lifecycle 이 DESTROYED 가 된다
  • 이 시점 부터는 GC에 의해 데이터들이 수거 될 수 있도록 fragment view에 대한 모든 참조가 제거 되어야 합니다

onDestroy()

public void onDestroy() { mCalled = true; }
  • fragment 가 제거되거나 fragmentManager가 destory 가 됐을 경우
  • Lifecycle 가 DESTROYED 가 된다
  • 이후에 onDetach() 가 호출 된다

Reference

profile
develop life
post-custom-banner

0개의 댓글