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");
}
}