Android中Activity的生命周期

大家好手形,今天給大家詳解一下Android中Activity的生命周期啥供,我在前面也曾經(jīng)講過這方面的內(nèi)容,但是像網(wǎng)上大多數(shù)文章一樣库糠,基本都是翻譯Android API伙狐,過于籠統(tǒng),相信大家看了瞬欧,會有一點(diǎn)點(diǎn)的幫助 贷屎,但是還不能完全吃透,所以我今天特意在重新總結(jié)一下.
首先看一下Android api中所提供的Activity生命周期圖(不明白的艘虎,可以看完整篇文章唉侄,在回頭看一下這個圖,你會明白的):


Activity其實(shí)是繼承了ApplicationContext這個類野建,我們可以重寫以下方法属划,如下代碼:
[java] view plaincopy
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}

為了便于大家更好的理解恬叹,我簡單的寫了一個Demo,不明白Activity周期的朋友們,可以親手實(shí)踐一下榴嗅,大家按照我的步驟來妄呕。
第一步:新建一個Android工程,我這里命名為ActivityDemo.
第二步:修改ActivityDemo.java(我這里重新寫了以上的七種方法嗽测,主要用Log打印),代碼如下:
[java] view plaincopy

package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {

private static final String TAG = "ActivityDemo";

public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
      
    Log.e(TAG, "start onCreate~~~");  
}  
  
@Override  
protected void onStart() {  
    super.onStart();  
    Log.e(TAG, "start onStart~~~");  
}  
  
@Override  
protected void onRestart() {  
    super.onRestart();  
    Log.e(TAG, "start onRestart~~~");  
}  
  
@Override  
protected void onResume() {  
    super.onResume();  
    Log.e(TAG, "start onResume~~~");  
}  
  
@Override  
protected void onPause() {  
    super.onPause();  
    Log.e(TAG, "start onPause~~~");  
}  
  
@Override  
protected void onStop() {  
    super.onStop();  
    Log.e(TAG, "start onStop~~~");  
}  
  
@Override  
protected void onDestroy() {  
    super.onDestroy();  
    Log.e(TAG, "start onDestroy~~~");  
}  

}

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


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

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

HOME鍵:
當(dāng)我們打開應(yīng)用程序時晤愧,比如瀏覽器大莫,我正在瀏覽NBA新聞,看到一半時官份,我突然想聽歌只厘,這時候我們會選擇按HOME鍵,然后去打開音樂應(yīng)用程序舅巷,而當(dāng)我們按HOME的時候羔味,Activity先后執(zhí)行了onPause()->onStop()這兩個方法,這時候應(yīng)用程序并沒有銷毀钠右。如下圖所示:

而當(dāng)我們再次啟動ActivityDemo應(yīng)用程序時赋元,則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個方法,如下圖所示:

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

第四步:修改main.xml布局文件(增加了一個EditText),代碼如下:
[java]view plaincopy
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

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


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


這顯然不能稱得一個合格的應(yīng)用程序凌摄,所以我們需要在Activity幾個方法里自己實(shí)現(xiàn),如下第六步所示:
第六步修改ActivityDemo.java代碼如下:
[java] view plaincopy

package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
public class ActivityDemo extends Activity {

private static final String TAG = "ActivityDemo";  
private EditText mEditText;  
//定義一個String 類型用來存取我們EditText輸入的值  
private String mString;  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    mEditText = (EditText)findViewById(R.id.editText);  
    Log.e(TAG, "start onCreate~~~");  
}  
  
@Override  
protected void onStart() {  
    super.onStart();  
    Log.e(TAG, "start onStart~~~");  
}  
//當(dāng)按HOME鍵時漓帅,然后再次啟動應(yīng)用時锨亏,我們要恢復(fù)先前狀態(tài)  
@Override  
protected void onRestart() {  
    super.onRestart();  
    mEditText.setText(mString);  
    Log.e(TAG, "start onRestart~~~");  
}  
  
@Override  
protected void onResume() {  
    super.onResume();  
    Log.e(TAG, "start onResume~~~");  
}  
  
//當(dāng)我們按HOME鍵時痴怨,我在onPause方法里,將輸入的值賦給mString  
@Override  
protected void onPause() {  
    super.onPause();  
    mString = mEditText.getText().toString();  
    Log.e(TAG, "start onPause~~~");  
}  
  
@Override  
protected void onStop() {  
    super.onStop();  
    Log.e(TAG, "start onStop~~~");  
}  
  
@Override  
protected void onDestroy() {  
    super.onDestroy();  
    Log.e(TAG, "start onDestroy~~~");  
}  

}

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



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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雷则,一起剝皮案震驚了整個濱河市辆雾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌月劈,老刑警劉巖度迂,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猜揪,居然都是意外死亡惭墓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門湿右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诅妹,“玉大人,你說我怎么就攤上這事毅人】越疲” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵丈莺,是天一觀的道長划煮。 經(jīng)常有香客問我,道長缔俄,這世上最難降的妖魔是什么弛秋? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮俐载,結(jié)果婚禮上蟹略,老公的妹妹穿的比我還像新娘。我一直安慰自己遏佣,他們只是感情好挖炬,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著状婶,像睡著了一般意敛。 火紅的嫁衣襯著肌膚如雪馅巷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天草姻,我揣著相機(jī)與錄音钓猬,去河邊找鬼。 笑死撩独,一個胖子當(dāng)著我的面吹牛敞曹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跌榔,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼异雁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了僧须?” 一聲冷哼從身側(cè)響起纲刀,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎担平,沒想到半個月后示绊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暂论,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年面褐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片取胎。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡展哭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闻蛀,到底是詐尸還是另有隱情匪傍,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布觉痛,位于F島的核電站役衡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏薪棒。R本人自食惡果不足惜手蝎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俐芯。 院中可真熱鬧棵介,春花似錦、人聲如沸吧史。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春祭饭,著一層夾襖步出監(jiān)牢的瞬間颇象,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工煤痕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓灵再,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亿笤。 傳聞我的和親對象是個殘疾皇子翎迁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,742評論 25 707
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,365評論 0 17
  • 下面是activity是生命周期圖譜 onCreate() onStart() onResume() onPaus...
    SUNxt閱讀 266評論 4 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理净薛,服務(wù)發(fā)現(xiàn)汪榔,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 呵肃拜,我看見你了你和它卿卿我我惡心至極痴腌!我今天偷看你被發(fā)現(xiàn)了那一刻我小鹿亂撞眼里全是笑意差點(diǎn)暴露 我知道你看見了現(xiàn)在...
    我的暗戀日記閱讀 164評論 0 1