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应用中很常见。

 

 posted on 2013-12-17 11:44  wlrhnh  阅读(1588)  评论(0编辑  收藏  举报