您的位置:首页 > 移动开发 > Android开发

Android 程式开发:(三)碎片简介 —— 3.2 Fragment的生命周期

2013-09-20 13:53 435 查看
就像activities一样,fragments也有它们自己的生命周期。理解fragments的生命周期,可以使你在它们被销毁的时候保存它们的实例,这样在它们重新被创建的时候,就能恢复它们之前的状态。下面的例子测试了fragments的不同状态。

1. 创建一个Fragment的子类:Fragment1.java。

[java] view
plaincopy

public class Fragment1 extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

Log.d("Fragment 1", "onCreateView");

// ---Inflate the layout for this fragment---

return inflater.inflate(R.layout.fragment1, container, false);

}

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

Log.d("Fragment 1", "onAttach");

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Log.d("Fragment 1", "onCreate");

}

@Override

public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

Log.d("Fragment 1", "onActivityCreated");

}

@Override

public void onStart() {

super.onStart();

Log.d("Fragment 1", "onStart");

}

@Override

public void onResume() {

super.onResume();

Log.d("Fragment 1", "onResume");

}

@Override

public void onPause() {

super.onPause();

Log.d("Fragment 1", "onPause");

}

@Override

public void onStop() {

super.onStop();

Log.d("Fragment 1", "onStop");

}

@Override

public void onDestroyView() {

super.onDestroyView();

Log.d("Fragment 1", "onDestroyView");

}

@Override

public void onDestroy() {

super.onDestroy();

Log.d("Fragment 1", "onDestroy");

}

@Override

public void onDetach() {

super.onDetach();

Log.d("Fragment 1", "onDetach");

}

}

2. 按Ctrl+F11,将模拟器转换成“横屏模式”。

3. 按F11调试。

4. 当应用被加载的时候,LogCat窗口中有如下显示。

[plain] view
plaincopy

03-27 12:23:32.255: D/Fragment 1(704): onAttach

03-27 12:23:32.255: D/Fragment 1(704): onCreate

03-27 12:23:32.255: D/Fragment 1(704): onCreateView

03-27 12:23:32.274: D/Fragment 1(704): onActivityCreated

03-27 12:23:32.274: D/Fragment 1(704): onStart

03-27 12:23:32.286: D/Fragment 1(704): onResume

5. 按Home键,LogCat窗口中有如下显示。

[plain] view
plaincopy

03-27 12:25:23.174: D/Fragment 1(704): onPause

03-27 12:25:25.174: D/Fragment 1(704): onStop

6.按Home键不放,重新进入应用,LogCat窗口中有如下显示。

[plain] view
plaincopy

03-27 12:26:21.505: D/Fragment 1(704): onStart

03-27 12:26:21.505: D/Fragment 1(704): onResume

7. 按返回键,LogCat窗口中有如下显示。

[plain] view
plaincopy

03-27 12:27:54.384: D/Fragment 1(704): onPause

03-27 12:27:55.324: D/Fragment 1(704): onStop

03-27 12:27:55.324: D/Fragment 1(704): onDestroyView

03-27 12:27:55.324: D/Fragment 1(704): onDestroy

03-27 12:27:55.324: D/Fragment 1(704): onDetach

分析

1. 当一个fragment被创建的时候,它会经历以下状态.。

onAttach()
onCreate()
onCreateView()
onActivityCreated()

2. 当这个fragment对用户可见的时候,它会经历以下状态。

onStart()
onResume()

3. 当这个fragment进入“后台模式”的时候,它会经历以下状态。

onPause()
onStop()

4. 当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。

onPause()
onStop()
onDestroyView()
onDestroy() // 本来漏掉类这个回调,感谢xiangxue336提出。

onDetach()

5. 就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。

onCreate()
onCreateView()
onActivityCreated()

6. fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。

onAttached() —— 当fragment和activity关联之后,调用这个方法。
onCreateView() —— 创建fragment中的视图的时候,调用这个方法。
onActivityCreated() —— 当activity的onCreate()方法被返回之后,调用这个方法。
onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
onDetach() —— 当fragment和activity分离的时候,调用这个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: