<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢(mèng)幻之旅

    DEBUG - 天道酬勤

       :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks

    大家好,今天給大家詳解一下Android中Activity的生命周期,我在前面也曾經(jīng)講過(guò)這方面的內(nèi)容,但是像網(wǎng)上大多數(shù)文章一樣,基本都是翻譯Android API,過(guò)于籠統(tǒng),相信大家看了,會(huì)有一點(diǎn)點(diǎn)的幫助 ,但是還不能完全吃透,所以我今天特意在重新總結(jié)一下.

    首先看一下Android api中所提供的Activity生命周期圖(不明白的,可以看完整篇文章,在回頭看一下這個(gè)圖,你會(huì)明白的):

     

    Activity其實(shí)是繼承了ApplicationContext這個(gè)類(lèi),我們可以重寫(xiě)以下方法,如下代碼:

    1. public class Activity extends ApplicationContext {  
    2.        protected void onCreate(Bundle savedInstanceState);  
    3.          
    4.        protected void onStart();     
    5.          
    6.        protected void onRestart();  
    7.          
    8.        protected void onResume();  
    9.          
    10.        protected void onPause();  
    11.          
    12.        protected void onStop();  
    13.          
    14.        protected void onDestroy();  
    15.    }  

     

     

    為了便于大家更好的理解,我簡(jiǎn)單的寫(xiě)了一個(gè)Demo,不明白Activity周期的朋友們,可以親手實(shí)踐一下,大家按照我的步驟來(lái)。

    第一步:新建一個(gè)Android工程,我這里命名為ActivityDemo.

    第二步:修改ActivityDemo.java(我這里重新寫(xiě)了以上的七種方法,主要用Log打印),代碼如下:

    1. package com.tutor.activitydemo;  
    2. import android.app.Activity;  
    3. import android.os.Bundle;  
    4. import android.util.Log;  
    5. public class ActivityDemo extends Activity {  
    6.      
    7.     private static final String TAG = "ActivityDemo";  
    8.       
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         setContentView(R.layout.main);  
    12.           
    13.         Log.e(TAG, "start onCreate~~~");  
    14.     }  
    15.       
    16.     @Override  
    17.     protected void onStart() {  
    18.         super.onStart();  
    19.         Log.e(TAG, "start onStart~~~");  
    20.     }  
    21.       
    22.     @Override  
    23.     protected void onRestart() {  
    24.         super.onRestart();  
    25.         Log.e(TAG, "start onRestart~~~");  
    26.     }  
    27.       
    28.     @Override  
    29.     protected void onResume() {  
    30.         super.onResume();  
    31.         Log.e(TAG, "start onResume~~~");  
    32.     }  
    33.       
    34.     @Override  
    35.     protected void onPause() {  
    36.         super.onPause();  
    37.         Log.e(TAG, "start onPause~~~");  
    38.     }  
    39.       
    40.     @Override  
    41.     protected void onStop() {  
    42.         super.onStop();  
    43.         Log.e(TAG, "start onStop~~~");  
    44.     }  
    45.       
    46.     @Override  
    47.     protected void onDestroy() {  
    48.         super.onDestroy();  
    49.         Log.e(TAG, "start onDestroy~~~");  
    50.     }  
    51.       
    52. }  

     

     

    第三步:運(yùn)行上述工程,效果圖如下(沒(méi)什么特別的):

    核心在Logcat視窗里,如果你還不會(huì)用Logcat你可以看一下我的這篇文章 Log圖文詳解(Log.v,Log.d,Log.i,Log.w,Log.e) ,我們打開(kāi)應(yīng)用時(shí)先后執(zhí)行了onCreate()->onStart()->onResume三個(gè)方法,看一下LogCat視窗如下:

    BACK鍵:

    當(dāng)我們按BACK鍵時(shí),我們這個(gè)應(yīng)用程序?qū)⒔Y(jié)束,這時(shí)候我們將先后調(diào)用onPause()->onStop()->onDestory()三個(gè)方法,如下圖所示:

    HOME鍵:

    當(dāng)我們打開(kāi)應(yīng)用程序時(shí),比如瀏覽器,我正在瀏覽NBA新聞,看到一半時(shí),我突然想聽(tīng)歌,這時(shí)候我們會(huì)選擇按HOME鍵,然后去打開(kāi)音樂(lè)應(yīng)用程序,而當(dāng)我們按HOME的時(shí)候,Activity先后執(zhí)行了onPause()->onStop()這兩個(gè)方法,這時(shí)候應(yīng)用程序并沒(méi)有銷(xiāo)毀。如下圖所示:

    而當(dāng)我們?cè)俅螁?dòng)ActivityDemo應(yīng)用程序時(shí),則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個(gè)方法,如下圖所示:

     

    這里我們會(huì)引出一個(gè)問(wèn)題,當(dāng)我們按HOME鍵,然后再進(jìn)入ActivityDemo應(yīng)用時(shí),我們的應(yīng)用的狀態(tài)應(yīng)該是和按HOME鍵之前的狀態(tài)是一樣的,同樣為了方便理解,在這里我將ActivityDemo的代碼作一些修改,就是增加一個(gè)EditText。

     

    第四步:修改main.xml布局文件(增加了一個(gè)EditText),代碼如下:

    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:orientation="vertical"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     >  
    7. <TextView    
    8.     android:layout_width="fill_parent"   
    9.     android:layout_height="wrap_content"   
    10.     android:text="@string/hello"  
    11.     />  
    12. <EditText  
    13.     android:id="@+id/editText"  
    14.     android:layout_width="fill_parent"  
    15.     android:layout_height="wrap_content"  
    16. />  
    17. </LinearLayout>  

     

    第五步:然后其他不變,運(yùn)行ActivityDemo程序,在EditText里輸入如"Frankie"字符串(如下圖:)

     

    這時(shí)候,大家可以按一下HOME鍵,然后再次啟動(dòng)ActivityDemo應(yīng)用程序,這時(shí)候EditText里并沒(méi)有我們輸入的"Frankie"字樣,如下圖:

    這顯然不能稱(chēng)得一個(gè)合格的應(yīng)用程序,所以我們需要在Activity幾個(gè)方法里自己實(shí)現(xiàn),如下第六步所示:

    第六步修改ActivityDemo.java代碼如下:

    1. package com.tutor.activitydemo;  
    2. import android.app.Activity;  
    3. import android.os.Bundle;  
    4. import android.util.Log;  
    5. import android.widget.EditText;  
    6. public class ActivityDemo extends Activity {  
    7.      
    8.     private static final String TAG = "ActivityDemo";  
    9.     private EditText mEditText;  
    10.     //定義一個(gè)String 類(lèi)型用來(lái)存取我們EditText輸入的值  
    11.     private String mString;  
    12.     public void onCreate(Bundle savedInstanceState) {  
    13.         super.onCreate(savedInstanceState);  
    14.         setContentView(R.layout.main);  
    15.         mEditText = (EditText)findViewById(R.id.editText);  
    16.         Log.e(TAG, "start onCreate~~~");  
    17.     }  
    18.       
    19.     @Override  
    20.     protected void onStart() {  
    21.         super.onStart();  
    22.         Log.e(TAG, "start onStart~~~");  
    23.     }  
    24.     //當(dāng)按HOME鍵時(shí),然后再次啟動(dòng)應(yīng)用時(shí),我們要恢復(fù)先前狀態(tài)  
    25.     @Override  
    26.     protected void onRestart() {  
    27.         super.onRestart();  
    28.         mEditText.setText(mString);  
    29.         Log.e(TAG, "start onRestart~~~");  
    30.     }  
    31.       
    32.     @Override  
    33.     protected void onResume() {  
    34.         super.onResume();  
    35.         Log.e(TAG, "start onResume~~~");  
    36.     }  
    37.       
    38.     //當(dāng)我們按HOME鍵時(shí),我在onPause方法里,將輸入的值賦給mString  
    39.     @Override  
    40.     protected void onPause() {  
    41.         super.onPause();  
    42.         mString = mEditText.getText().toString();  
    43.         Log.e(TAG, "start onPause~~~");  
    44.     }  
    45.       
    46.     @Override  
    47.     protected void onStop() {  
    48.         super.onStop();  
    49.         Log.e(TAG, "start onStop~~~");  
    50.     }  
    51.       
    52.     @Override  
    53.     protected void onDestroy() {  
    54.         super.onDestroy();  
    55.         Log.e(TAG, "start onDestroy~~~");  
    56.     }  
    57.       
    58. }  

     

    第七步:重新運(yùn)行ActivityDemo程序,重復(fù)第五步操作,當(dāng)我們按HOME鍵時(shí),再次啟動(dòng)應(yīng)用程序時(shí),EditText里有上次輸入的"Frankie"字樣,如下圖如示:

    OK,大功基本告成,這時(shí)候大家可以在回上面看一下Activity生命周期圖,我想大家應(yīng)該完全了解了Activity的生命周期了,不知道你了解了沒(méi)?

    posted on 2013-04-20 13:41 HUIKK 閱讀(294) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Android
    主站蜘蛛池模板: 最近中文字幕无免费视频| 最近中文字幕mv免费高清视频8| 久久久受www免费人成| 免费国产成人α片| 免费福利在线播放| 国产一级淫片视频免费看| 中文亚洲成a人片在线观看| 亚洲最新视频在线观看| 亚洲已满18点击进入在线观看| 久久精品国产亚洲AV天海翼| 三级黄色免费观看| 97性无码区免费| 亚洲国产成人五月综合网| 亚洲AV永久无码区成人网站| 日韩亚洲不卡在线视频中文字幕在线观看 | 国产va精品免费观看| 伊人久久亚洲综合影院| 亚洲av无码片在线播放| 亚洲性色精品一区二区在线| 国产精品成人69XXX免费视频| 亚洲无砖砖区免费| 四虎亚洲国产成人久久精品| 亚洲一级二级三级不卡| 亚洲AV无码一区二区三区电影| 中文字幕久精品免费视频| 成人免费无码大片a毛片| 亚洲夜夜欢A∨一区二区三区| 亚洲av午夜精品无码专区| 一级人做人a爰免费视频| 久久久久久久免费视频| 国产精品亚洲αv天堂无码| 亚洲香蕉久久一区二区| jizz免费在线观看| 可以免费看黄视频的网站| 亚洲午夜久久久影院| 亚洲精品无码专区久久| 99精品视频免费观看| 亚洲成A人片77777国产| 亚洲91精品麻豆国产系列在线| a毛片全部免费播放| 成人国产mv免费视频|