アクティビティと分割のライフサイクル(2)-分割


中に入る.
分割にも独自のライフサイクルがあります.
Activityと同じ名前のメソッドを呼び出すプロセスもありますが、他の方法もあります.(例:onCreateView()など)
また、FragmentはActivityの上で動作するので、Activityのライフサイクルにも関連しているので、調べたほうがいいでしょう.

ライフサイクル順序



Fragmentのライフサイクルメソッド呼び出し順序は次のとおりです.
Activityとは少し異なり、ビューにライフサイクルメソッドが含まれていることがわかります.
=> onCreateView(), onViewCreated(), onDestroyView()
分割はアクティブまたは親分割に管理されなければ存在しないため、分割がアクティブまたは親分割にアタッチされると、画像には存在しないが、onCreate()の前、onDestroy()の後にonAttach()およびonDetach()がそれぞれ存在する方法が現れる.

ライフサイクルメソッド


onAttach()


前述したように、分割がアクティブまたは親分割されたときに呼び出されます.
Activity Contextはパラメータなので必要に応じて参照できます.

onCreate()


分割の生成時に呼び出されます.
Activityと同様に初期化操作に適していますが、Viewを処理しない点が異なります.
onCreate()では、savedInstanceStateというBundleオブジェクトがパラメータに渡され、分割の最初の作成時にnullに渡されますが、その後non-null値に渡されます.
アクティビティと同様に、画面回転などの構成変更により成分割が再生成された場合、ステータス値を保存しsavedInstanceStateからインポートして使用できます.

onCreateView()


Fragment Viewに戻る方法は、ここからFragment Viewライフサイクルの始まりです.
返されるビューは、onViewCreated()のパラメータに移動します.

onViewCreated()


パラメータとして、onCreateView()が渡すビューがビューに渡されます.ここではUIに関連する操作が適切です.
(RecycleViewでのアダプタ接続など)

onViewStateRestored()


ビューのステータスがすべて復元されたときに呼び出されます.そのため、Viewのステータス値をチェックするのに適しています.(チェックボックスがチェックされているかどうかなど)

onStart()


今はビューが見える時刻です.
Activityに似たonStart()ポイントを呼び出します.

onResume()


Viewはユーザーと対話できます.
アクティブなonResume()ポイントと同様に呼び出されます.
ここで注意すべき点は、
分割およびアクティブなonStart()メソッドとonResume()メソッドには、特定のプリコール順序はありません.
すなわち,Activityメソッドを先に呼び出してもよいし,Fragmentメソッドを先に呼び出してもよい.

onPause()


分割一時停止時に呼び出されます.スクリーンには見えますが、ピントを失った状態です.
アクティビティと同じです.

onStop()


分割が画面に表示されない場合に呼び出されます.
API 28の前後のonStop()呼び出し点は異なる.
28以前はonSaveInstanceState()呼び出し後にonStop()が保存されていました.
28以降、onSaveInstanceState()はonStop()の後に呼び出されるので、分割状態が保存されていない時点である.

onDestroyView()


分割が画面から離れたときに呼び出されます.
ここで、Fragment Viewのライフサイクルは終了します.
分割ビューのすべての参照を無効にします.

onDestroy()


分割のライフサイクルが終了し、分割が削除されたときに呼び出されます.

onDetach()


分割がActivityから削除されたときに呼び出されます.

アクション


Activityに分割を直接追加して、実際の操作の手順を理解しましょう.
  • アクティビティにFirstFragmentというFragmentを追加し、アクティビティが終了する前に
  • を追加する.
    ================================================
    Activity에 Fragment 추가 후 종료때까지
    ================================================
    Activity: onCreate()
    FirstFragment: onAttach()
    FirstFragment: onCreate()
    FirstFragment: onCreateView()
    FirstFragment: onViewCreated()
    FirstFragment: onViewStateRestored()
    FirstFragment: onStart()
    Activity: onStart()
    Activity: onResume()
    FirstFragment: onResume()
    Activity: onPause()
    FirstFragment: onPause()
    Activity: onStop()
    FirstFragment: onStop()
    Activity: onDestroy()
    FirstFragment: onDestroyView()
    FirstFragment: onDestroy()
    FirstFragment: onDetach()
  • 第1フレームのスクリーン回転
  • ================================================
    화면 회전으로 인해 종료
    ================================================
    Activity: onPause()
    FirstFragment: onPause()
    Activity: onStop()
    FirstFragment: onStop()
    FirstFragment: onSaveInstanceState()
    Activity: onDestroy()
    FirstFragment: onDestroyView()
    FirstFragment: onDestroy()
    FirstFragment: onDetach()
    ================================================
    재생성시작
    ================================================
    FirstFragment: onAttach()
    FirstFragment: onCreate()
    Activity: onCreate()
    FirstFragment: onCreateView()
    FirstFragment: onViewCreated()
    FirstFragment: onViewStateRestored()
    FirstFragment: onStart()
    Activity: onStart()
    Activity: onResume()
    FirstFragment: onResume()
    Activityを直接オフにする場合とは異なり、OnSaveInstanceState()を呼び出すことができます.
    また,画面回転時に注意すべき点は,Activityで再生の有無をチェックせずに,分割を追加するコードを入れただけで,Activityは新たな分割を再作成して追加することである.
    /**
    Activity 코드
    재생성 여부를 확인하지 않았을 때
    */
    
    supportFragmentManager.beginTransaction()
    	.replace(R.id.container, firstFragment, "FirstFragment")
        .commit()
    
    /**
    결과 - 화면회전 후 onCreate()가 두번 호출되는 걸 볼 수 있다.
    */
    FirstFragment: onCreate() - FirstFragment{5837380} (76eade5e-8cad-43e1-ad04-d952f3cbdfb4 id=0x7f080081 tag=FirstFragment)
    FirstFragment: onCreate() - FirstFragment{a421681} (f4ccb172-1d39-4aea-894a-ae7935bcdcb9 id=0x7f080081 tag=FirstFragment)
    追加された分割は、設定変更(画面回転など)時に分割マネージャによって管理されるためです.
    したがって,Activity再生のために新しいactivityを追加する必要はない.
  • FirstFragmentからSecondFragmentに置き換えると
  • になります.
    ================================================
    Fragment 교체
    ================================================
    FirstFragment: onPause()
    FirstFragment: onStop()
    SecondFragment: onAttach()
    SecondFragment: onCreate()
    SecondFragment: onCreateView()
    SecondFragment: onViewCreated()
    SecondFragment: onViewStateRestored()
    SecondFragment: onStart()
    FirstFragment: onDestroyView()
    FirstFragment: onDestroy()
    FirstFragment: onDetach()
    SecondFragment: onResume()
    の最後の部分
    ActivityとFragmentのライフサイクルをまとめました.複雑なライフサイクルの管理を支援するAACライブラリがあります.
    ViewModel、Lifecycleなど...
    ライフサイクルを学習した場合は、上記のライブラリを使用して、困難なライフサイクルを管理することができます.
    ソース/コメント-
    https://readystory.tistory.com/199
    https://www.charlezz.com/?p=442