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