第一篇--Activity和Fragment生命周期研究

废话不说,直接上内容:

        首先创建一个android项目,创建四个文件:

JAVA文件:

        MainActivity.java

package com.godlovesoccer.testactivityfragmentlifecycle;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.d("avtivity", "onCreate before fragment ");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);  
        Fragment fragment = new TestFragment();  
        getFragmentManager().beginTransaction().add(android.R.id.content,fragment).commit();  
		Log.d("avtivity", "onCreate after fragment ");
	}
	
	protected void onStart(){
		super.onStart();
		Log.d("avtivity", "onStart");
	}
	
	protected void onRestart() {
		super.onRestart();
		Log.d("avtivity", "onRestart");
	}
	
	protected void onResume() {
		super.onResume();
		Log.d("avtivity", "onResume");
	}
	
	protected void onPause() {
		super.onPause();
		Log.d("avtivity", "onPause");
	}
	
	protected void onStop() {
		super.onStop();
		Log.d("avtivity", "onStop");
	}
	
	protected void onDestroy() {
		super.onDestroy();
		Log.d("avtivity", "onDestroy");
	}
}

        TestFragment.java

package com.godlovesoccer.testactivityfragmentlifecycle;


import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Activity;

public class TestFragment extends Fragment {
	public void onAttach(Activity activity){
		super.onAttach(activity); 
		Log.d("fragmet", "onAttach");
	}
		
	public void onCreate(Bundle savedInstanceState) {  
        Log.d("fragmet", "onCreate");  
        super.onCreate(savedInstanceState);  
        
    }  
	
	//onCreateView函数必须要inflater填充
	public View onCreateView(LayoutInflater inflater, ViewGroup container,  
            Bundle savedInstanceState) {  
        Log.d("fragmet", "onCreateView");  
        return inflater.inflate(R.layout.fragment,container,false);  
    }  
	
	 public void onActivityCreated(Bundle savedInstanceState) {  
         super.onActivityCreated(savedInstanceState);  
         Log.d("fragmet", "onActivityCreated"); 
     }  
	 
	 public void onStart() {  
         super.onStart();  
         Log.d("fragmet", "onStart"); 
     }  
	 
	public void onResume(){                                          
		super.onResume(); 
		Log.d("fragmet", "onResume");
	}	
	
	public void onPause(){
		super.onPause(); 
		Log.d("fragmet", "onPause");
	}	
	
	public void onStop() {  
        super.onStop();  
        Log.d("fragmet", "onStop"); 
    }  
	
	public void onDestroyView() {  
        super.onDestroyView();  
        Log.d("fragmet", "onDestroyView"); 
    }  
	
	public void onDestroy() {  
        super.onDestroy();  
        Log.d("fragmet", "onDestroy"); 
    }  
	
	public void onDetach() {  
        super.onDetach();  
        Log.d("fragmet", "onDetach"); 
    }  
	
}

        xml文件:

        activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.godlovesoccer.testactivityfragmentlifecycle.MainActivity" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.godlovesoccer.testactivityfragmentlifecycle.TestFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

fragment.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="#00FF00">

    <TextView
        android:id="@+id/lblFragment1"
    	android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="this is a fragment #1" 
        android:textColor="#000000"
        android:textSize="25sp"/>
    
</LinearLayout>

第一种情况:

正常启动应用时日志:

<span style="color:#ff0000;">11-05 06:19:44.150: D/avtivity(1768):    onCreate before fragment </span>
11-05 06:19:44.170: D/fragmet(1768):     onAttach
11-05 06:19:44.170: D/fragmet(1768):     onCreate
11-05 06:19:44.170: D/fragmet(1768):     onCreateView
<span style="color:#ff0000;">11-05 06:19:44.170: D/avtivity(1768):    onCreate after fragment </span>
11-05 06:19:44.170: D/fragmet(1768):     onActivityCreated
11-05 06:19:44.170: D/fragmet(1768):     onAttach
11-05 06:19:44.170: D/fragmet(1768):     onCreate
11-05 06:19:44.170: D/fragmet(1768):     onCreateView
11-05 06:19:44.170: D/fragmet(1768):     onActivityCreated
<span style="color:#ff0000;">11-05 06:19:44.170: D/avtivity(1768):    onStart</span>
11-05 06:19:44.170: D/fragmet(1768):     onStart
11-05 06:19:44.170: D/fragmet(1768):     onStart
<span style="color:#ff0000;">11-05 06:19:44.170: D/avtivity(1768):    onPostCreate
11-05 06:19:44.170: D/avtivity(1768):    onResume</span>
11-05 06:19:44.170: D/fragmet(1768):     onResume
11-05 06:19:44.170: D/fragmet(1768):     onResume


第二种情况:

当按下home键:

11-05 06:26:25.301: D/fragmet(1829):  onPause
11-05 06:26:25.301: D/fragmet(1829):  onPause
<span style="color:#ff0000;">11-05 06:26:25.301: D/avtivity(1829): onPause</span>
11-05 06:26:25.961: D/fragmet(1829):  onStop
11-05 06:26:25.961: D/fragmet(1829):  onStop
<span style="color:#ff0000;">11-05 06:26:25.961: D/avtivity(1829): onStop</span>

        长按home键后,选择程序进行启动:

<span style="color:#ff0000;">11-05 06:29:38.594: D/avtivity(1829): onRestart
11-05 06:29:38.594: D/avtivity(1829): onStart</span><span style="color:#330000;">
11-05 06:29:38.594: D/fragmet(1829):  onStart
11-05 06:29:38.594: D/fragmet(1829):  onStart</span><span style="color:#ff0000;">
11-05 06:29:38.594: D/avtivity(1829): onResume</span><span style="color:#330000;">
11-05 06:29:38.594: D/fragmet(1829):  onResume
11-05 06:29:38.594: D/fragmet(1829):  onResume</span>

第三种情况:

      当按下back键:

11-05 06:33:21.798: D/fragmet(1829):  onStop
11-05 06:33:21.798: D/fragmet(1829):  onStop
<span style="color:#ff0000;">11-05 06:33:21.798: D/avtivity(1829): onStop</span>
11-05 06:33:21.798: D/fragmet(1829):  onDestroyView
11-05 06:33:21.798: D/fragmet(1829):  onDestroy
11-05 06:33:21.798: D/fragmet(1829):  onDetach
11-05 06:33:21.798: D/fragmet(1829):  onDestroyView
11-05 06:33:21.808: D/fragmet(1829):  onDestroy
11-05 06:33:21.808: D/fragmet(1829):  onDetach
<span style="color:#ff0000;">11-05 06:33:21.808: D/avtivity(1829): onDestroy</span>


长按home键,选择程序进行启动:

<span style="color:#ff0000;">11-05 06:35:01.179: D/avtivity(1829): onCreate before fragment </span>
11-05 06:35:01.189: D/fragmet(1829):  onAttach
11-05 06:35:01.189: D/fragmet(1829):  onCreate
11-05 06:35:01.189: D/fragmet(1829):  onCreateView
<span style="color:#ff0000;">11-05 06:35:01.189: D/avtivity(1829): onCreate after fragment </span>
11-05 06:35:01.189: D/fragmet(1829):  onActivityCreated
11-05 06:35:01.189: D/fragmet(1829):  onAttach
11-05 06:35:01.189: D/fragmet(1829):  onCreate
11-05 06:35:01.189: D/fragmet(1829):  onCreateView
11-05 06:35:01.189: D/fragmet(1829):  onActivityCreated
<span style="color:#ff0000;">11-05 06:35:01.189: D/avtivity(1829): onStart</span>
11-05 06:35:01.189: D/fragmet(1829):  onStart
11-05 06:35:01.189: D/fragmet(1829):  onStart<span style="background-color: rgb(255, 0, 0);">
</span><span style="color:#ff0000;">11-05 06:35:01.189: D/avtivity(1829): onResume</span>
11-05 06:35:01.189: D/fragmet(1829):  onResume
11-05 06:35:01.189: D/fragmet(1829):  onResume
第四种情况:

启动新的应用程序将越来的程序进行覆盖,焦点被新的应程序夺走

        

11-05 06:39:55.684: D/fragmet(1829):  onPause
11-05 06:39:55.684: D/fragmet(1829):  onPause
<span style="color:#ff0000;">11-05 06:39:55.684: D/avtivity(1829): onPause</span>
11-05 06:39:56.831: D/fragmet(1829):  onStop
11-05 06:39:56.831: D/fragmet(1829):  onStop
<span style="color:#ff0000;">11-05 06:39:56.831: D/avtivity(1829): onStop</span>
       按back键,将覆盖的应用程序退掉

<span style="color:#ff0000;">11-05 06:42:02.775: D/avtivity(1829): onRestart
11-05 06:42:02.775: D/avtivity(1829): onStart</span>
11-05 06:42:02.775: D/fragmet(1829):  onStart
11-05 06:42:02.775: D/fragmet(1829):  onStart
<span style="color:#ff0000;">11-05 06:42:02.775: D/avtivity(1829): onResume</span>
11-05 06:42:02.775: D/fragmet(1829):  onResume
11-05 06:42:02.775: D/fragmet(1829):  onResume

第五种情况,改变屏幕的横竖方向:

<pre name="code" class="plain">11-05 06:43:43.037: D/fragmet(1829): onPause
11-05 06:43:43.037: D/fragmet(1829): onPause
11-05 06:43:43.037: D/fragmet(1829): onPause
11-05 06:43:43.037: D/fragmet(1829): onPause
<span style="color:#ff0000;">11-05 06:43:43.037: D/avtivity(1829): onPause</span>
11-05 06:43:43.037: D/fragmet(1829): onStop
11-05 06:43:43.037: D/fragmet(1829): onStop
11-05 06:43:43.037: D/fragmet(1829): onStop
11-05 06:43:43.037: D/fragmet(1829): onStop
<span style="color:#ff0000;">11-05 06:43:43.037: D/avtivity(1829): onStop</span>
11-05 06:43:43.037: D/fragmet(1829): onDestroyView
11-05 06:43:43.037: D/fragmet(1829): onDestroy
11-05 06:43:43.037: D/fragmet(1829): onDetach
11-05 06:43:43.037: D/fragmet(1829): onDestroyView
11-05 06:43:43.037: D/fragmet(1829): onDestroy
11-05 06:43:43.037: D/fragmet(1829): onDetach
11-05 06:43:43.037: D/fragmet(1829): onDestroyView
11-05 06:43:43.037: D/fragmet(1829): onDestroy
11-05 06:43:43.037: D/fragmet(1829): onDetach
11-05 06:43:43.037: D/fragmet(1829): onDestroyView
11-05 06:43:43.037: D/fragmet(1829): onDestroy
11-05 06:43:43.037: D/fragmet(1829): onDetach
<span style="color:#ff0000;">11-05 06:43:43.037: D/avtivity(1829): onDestroy</span>
11-05 06:43:43.037: W/Trace(1209): Unexpected value from nativeGetEnabledTags: 0
11-05 06:43:43.037: W/Trace(1209): Unexpected value from nativeGetEnabledTags: 0
<span style="color:#ff0000;">11-05 06:43:43.037: D/avtivity(1829): onCreate before fragment </span>
11-05 06:43:43.037: D/fragmet(1829): onAttach
11-05 06:43:43.037: D/fragmet(1829): onCreate
11-05 06:43:43.037: D/fragmet(1829): onAttach
11-05 06:43:43.037: D/fragmet(1829): onCreate
11-05 06:43:43.037: D/fragmet(1829): onAttach
11-05 06:43:43.037: D/fragmet(1829): onCreate
11-05 06:43:43.047: D/fragmet(1829): onAttach
11-05 06:43:43.047: D/fragmet(1829): onCreate
11-05 06:43:43.047: D/fragmet(1829): onCreateView
<span style="color:#ff0000;">11-05 06:43:43.047: D/avtivity(1829): onCreate after fragment </span>
11-05 06:43:43.047: D/fragmet(1829): onActivityCreated
11-05 06:43:43.047: D/fragmet(1829): onCreateView
11-05 06:43:43.047: D/fragmet(1829): onActivityCreated
11-05 06:43:43.047: D/fragmet(1829): onCreateView
11-05 06:43:43.047: D/fragmet(1829): onActivityCreated
11-05 06:43:43.047: D/fragmet(1829): onCreateView
11-05 06:43:43.047: D/fragmet(1829): onActivityCreated
11-05 06:43:43.047: D/fragmet(1829): onAttach
11-05 06:43:43.047: D/fragmet(1829): onCreate
11-05 06:43:43.047: D/fragmet(1829): onCreateView
11-05 06:43:43.047: D/fragmet(1829): onActivityCreated
<span style="color:#ff0000;">11-05 06:43:43.047: D/avtivity(1829): onStart</span>
11-05 06:43:43.047: D/fragmet(1829): onStart
11-05 06:43:43.047: D/fragmet(1829): onStart
11-05 06:43:43.047: D/fragmet(1829): onStart
11-05 06:43:43.047: D/fragmet(1829): onStart
11-05 06:43:43.047: D/fragmet(1829): onStart
<span style="color:#ff0000;">11-05 06:43:43.047: D/avtivity(1829): onResume</span>
11-05 06:43:43.047: D/fragmet(1829): onResume
11-05 06:43:43.047: D/fragmet(1829): onResume
11-05 06:43:43.047: D/fragmet(1829): onResume
11-05 06:43:43.047: D/fragmet(1829): onResume
11-05 06:43:43.047: D/fragmet(1829): onResume

 


目前功力尚浅,对activity和fragment的生命周期理解水平有限,只能通过看日志的方法大概知道函数的调用顺序:

1.首先activity的create函数进行布局。

2.fragment的前三个函数(onAttach onCreate onCreateview )都再activity完全创建之前调用。

3.对于其他函数,启动相关的(onStart onResume)都是activity先执行,结束相关的(onPause onStop onDestroy)

   都是fragment先执行。

4.第一次启动,back键后启动,翻转屏幕时,才会调用onCreate

5.onPause和onStop关系还有点糊涂

心得:

2014年11月5日:

fragment的添加方式有两种

第一种是直接在activity的布局xml种添加,然后在创建布局时,<fragment>的内容会被fragment.xml替代

第二种是通过代码进行创建,上面的代码是我理解错误造成的,一下造了两个fragment,一个是activity的xml

            生成的,一个是代码创建的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值