2013-12-17
有时候会发现在xml文件中有使用fragment,但是却不是为了显示View,代码如下:
1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".AnimTest" > 6 7 <fragment 8 android:id="@+id/loader_fra" 9 class="com.example.sdtest.LoadInXmlFragment" 10 android:layout_height="0dip" 11 android:layout_width="0dip" 12 android:visibility="gone"/> 13 14 <ImageView 15 android:id="@+id/welcome_image" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:src="@drawable/phone" 19 tools:ignore="ContentDescription" /> 20 21 </FrameLayout>
可以看到上面xml文件中有LoadInXmlFragment,那我们来看看当进入和退出Activity时Activity和LoadInXmlFragment的生命周期, log如下:
1 // Enter Activity: 2 D/David-Activity( 7378): onCreate 3 D/David-Fragment( 7378): onAttach 4 D/David-Activity( 7378): onAttachFragment 5 D/David-Fragment( 7378): onCreate 6 D/David-Fragment( 7378): onCreateView 7 D/David-Fragment( 7378): onActivityCreated 8 D/David-Activity( 7378): onStart 9 D/David-Fragment( 7378): onStart 10 D/David-Activity( 7378): onResume 11 D/David-Fragment( 7378): onResume 12 // Exist Activity: 13 D/David-Fragment( 7378): onPause 14 D/David-Activity( 7378): onPause 15 D/David-Fragment( 7378): onStop 16 D/David-Activity( 7378): onStop 17 D/David-Fragment( 7378): onDestroy 18 D/David-Activity( 7378): onDestroy
D/David-Fragment表示LoadInXmlFragment中打印的log;
D/David-Activity表示Activity中打印的log;
可以看到Fragment基本是随着Activity执行自己的生命周期函数,因此这样使用Fragment的好处是:
1. 由于Fragment的上面周期和Activity保持一致,因此可以利用其完整的生命周期,将某些需要在Activity特定生命周期中执行的操作放在Fragment里面;
2. 保证较好的编码风格;
3. 目前就想到这么多,希望大家补充;
这种方式在Phonebook应用中很常见。