Android之碎片生命週期

Android之碎片週期

碎片在其生命週期內會經歷以下幾種狀態:

  • 運行狀態:當一個碎片是可見時,並且與它關聯的活動正處於運行狀態時,該碎片也會處於運行狀態。
  • 暫停狀態:當一個活動進入暫停(由於另一個未佔滿屏幕的活動被添加到了棧頂),與它相關聯的可見的碎片就會進入暫停狀態。
  • 停止狀態:當一個活動進入停止狀態,與它相關聯的碎片也會進入停止狀態。或者通過調用 FragmentTransaction 的 remove()、replace() 方法將碎片從活動中移除,但若在事務提交之前調用 addToBackStack() 方法,這時的碎片也會進入停止狀態。總的來說,進入停止狀態的碎片對用戶來說是完全不可見的,有可能會被系統回收。
  • 銷燬狀態:碎片總是依附於活動而存在的,因此當活動被銷燬時,與它相關聯的碎片也會進入銷燬狀態。或者通過調用 FragmentTransaction 的 remove() 、replace() 方法把碎片從活動中移除,但在事務提交之前並沒有調用 addToBackStack() 方法的情況下,碎片也會進入銷燬狀態。

Fragment 類中也提供了一系列的回調方法,用於覆蓋碎片生命週期的每個環節。其中,活動中有的回調方法,碎片中幾乎都有,除此之外,碎片還提供了一些附加的回調方法:

  • onAttach() - 當碎片和活動建立關聯時。
  • onCreateView() - 爲碎片創建視圖(加載佈局)時。
  • onActivityCreated() - 確保與碎片相關聯的活動已經創建完畢。
  • onDestroyView() - 當與碎片關聯的視圖被移除時。
  • onDetach() - 當碎片和活動解除關聯時。
public class RightFragment extends Fragment 
{
    public static final String TAG = "RightFragment";
    @Override
        public void onAttach(Activity activity) 
    {
        super.onAttach(activity);
        Log.d(TAG, "onAttach");
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate");
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {
        Log.d(TAG, "onCreateView");
        View view = inflater.inflate(R.layout.right_fragment, container, false);
        return view;
    }
  
    @Override
    public void onActivityCreated(Bundle savedInstanceState) 
    {
    super.onActivityCreated(savedInstanceState);
    Log.d(TAG, "onActivityCreated");
    }
 
    @Override
    public void onStart() 
    {
        super.onStart();
        Log.d(TAG, "onStart"); 
    }
 
    @Override
    public void onResume() 
    {
        super.onResume();
        Log.d(TAG, "onResume");
    }
 
    @Override
    public void onPause() 
    {
        super.onPause();
        Log.d(TAG, "onPause");
    }
 
    @Override
    public void onStop() 
    {
        super.onStop();
        Log.d(TAG, "onStop");
    }
 
    @Override
    public void onDestroyView() 
    {
        super.onDestroyView();
        Log.d(TAG, "onDestroyView");
    }
 
    @Override    
    public void onDestroy() 
    {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
    }
 
    @Override
    public void onDetach() 
    {
        super.onDetach();
        Log.d(TAG, "onDetach");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章