Android Activity生命周期淺談

今天和大家討論一下Android中Activity的生命周期岂膳,雖然網(wǎng)上有很多文章都有介紹岖沛,但是大多解釋的不是很詳盡钠怯,所以這里我和大家一起總結(jié)一下這個(gè)知識(shí)點(diǎn)玻驻。首先我們先看一下Activity的生命周期圖。

Activity生命周期.jpg

Activity中有onCreate(),onStart(),onRestart()onResume(),onPause(),onStop()和onDestory()七個(gè)方法摊聋。下面我們依次介紹這些方法合適被調(diào)用:

(1) onCreate():Activity被創(chuàng)建時(shí)會(huì)被調(diào)用鸡捐,用于設(shè)置全局狀態(tài)。

(2)onStart():Activity被顯示出來(lái)的時(shí)候調(diào)用onStart(),但此時(shí)Activity不能與用戶交互麻裁。

(3)onRestart():從onStop()狀態(tài)到onStart()狀態(tài)變化時(shí)執(zhí)行箍镜,即Activity恢復(fù)可視狀態(tài)源祈。

(4)onResume():當(dāng)Acitvity被聚焦時(shí),執(zhí)行onRestart()色迂,用戶可以與Activity進(jìn)行交互香缺。

(5)onPause():當(dāng)Activity被另一個(gè)透明或者Dialog樣式的Activity覆蓋時(shí)執(zhí)行該方法,此時(shí)Activity仍然可見(jiàn)脚草,但是已經(jīng)失去聚焦赫悄,不能與用戶進(jìn)行聚焦。

(6)onStop():當(dāng)Activity不可見(jiàn)時(shí)馏慨,Activity處于Stopped狀態(tài)。

(7)onDestorry():Activity結(jié)束時(shí)銷毀線程姑隅,釋放資源等写隶。

下面我們用一個(gè)demo來(lái)進(jìn)一步解釋Activity的生命周期,demo的源碼和布局文件如下:

MainActivity.java
package linuszhao.js.one.jsactivitydemo;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

private static String TAG = "linus";
private Button btn1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e(TAG, "start onCreate............");
    btn1 = (Button) findViewById(R.id.btn1);
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new AlertDialog.Builder(MainActivity.this).setTitle("一個(gè)彈框").show();
        }
    });
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e(TAG, "start onSaveInstanceState............");
}

@Override
protected void onStart() {
    super.onStart();
    Log.e(TAG, "start onStart............");
}

@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............");
}

@Override
protected void onRestart() {
    super.onRestart();
    Log.e(TAG, "start onRestart............");
}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="linuszhao.js.one.jsactivitydemo.MainActivity">

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="Welcome my wrold!"
    android:textSize="20sp" />

<EditText
    android:id="@+id/etstring"
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:layout_below="@+id/tv1"
    android:textSize="20sp" />

<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/etstring"
    android:text="彈出dialog"
    android:textSize="20sp" />

</RelativeLayout>

(1)打開(kāi)應(yīng)用時(shí)先后執(zhí)行了onCreate()->onStart()->onResume三個(gè)方法讲仰,看一下LogCat視窗如下:


start.jpg

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


back.jpg

(3)當(dāng)我們按HOME的時(shí)候冕房,Activity先后執(zhí)行了onPause()->onStop()這兩個(gè)方法,這時(shí)候應(yīng)用程序并沒(méi)有銷毀趁矾。如下圖所示:
home.jpg

(4)當(dāng)再次啟動(dòng)應(yīng)用程序時(shí)耙册,則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個(gè)方法,如下圖所示:

onRestart.jpg

(5)當(dāng)點(diǎn)擊button按鈕毫捣,彈出對(duì)話框時(shí)详拙,并會(huì)執(zhí)行onPause(),這是因?yàn)閐ialog是Activity的一部分,所以Activity的狀態(tài)不會(huì)變化蔓同。若由其他Activity彈出的dialog導(dǎo)致Acitivity失去聚焦饶辙,則會(huì)執(zhí)行onPause()。

(6) 每次打開(kāi)應(yīng)用后斑粱,文本框的內(nèi)容都是空的弃揽,即使輸入內(nèi)容后下次再進(jìn)入應(yīng)用仍然是空的。但是當(dāng)我們輸入輸入內(nèi)容后则北,按Home鍵跳出矿微,當(dāng)再次返回時(shí)文本框卻保存了我們之前輸入的內(nèi)容。這是由于onSaveInstanceState()方法再起作用咒锻,再點(diǎn)擊Home鍵的時(shí)候冷冗,系統(tǒng)調(diào)用了onSaveInstanceState()保存了臨時(shí)數(shù)據(jù)。下面我們?cè)僦貙?xiě)一下onSaveInstanceState()方法惑艇,看看點(diǎn)擊Home按鍵時(shí)都調(diào)用了哪些方法蒿辙。
onSaveInstanceState.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拇泛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子思灌,更是在濱河造成了極大的恐慌俺叭,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泰偿,死亡現(xiàn)場(chǎng)離奇詭異熄守,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耗跛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)裕照,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人调塌,你說(shuō)我怎么就攤上這事晋南。” “怎么了羔砾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵负间,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我姜凄,道長(zhǎng)政溃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任态秧,我火速辦了婚禮董虱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屿聋。我一直安慰自己空扎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布润讥。 她就那樣靜靜地躺著转锈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楚殿。 梳的紋絲不亂的頭發(fā)上撮慨,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音脆粥,去河邊找鬼砌溺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛变隔,可吹牛的內(nèi)容都是我干的规伐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匣缘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猖闪!你這毒婦竟也來(lái)了鲜棠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤培慌,失蹤者是張志新(化名)和其女友劉穎豁陆,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吵护,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盒音,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了馅而。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祥诽。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖用爪,靈堂內(nèi)的尸體忽然破棺而出原押,到底是詐尸還是另有隱情,我是刑警寧澤偎血,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盯漂,受9級(jí)特大地震影響颇玷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜就缆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一帖渠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竭宰,春花似錦空郊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至廓旬,卻和暖如春哼审,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕豹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工涩盾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人励背。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓春霍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叶眉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子址儒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 啟動(dòng)與銷毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例芹枷,Android 系統(tǒng)會(huì)通過(guò)調(diào)用對(duì)...
    安卓Boy閱讀 1,775評(píng)論 3 5
  • Android Activity生命周期圖譜 activity類處于android.app包中,繼承體系如下: j...
    鋤禾日當(dāng)閱讀 751評(píng)論 1 0
  • 孩子离福, 我希望你自始至終都是一個(gè)理想主義者杖狼。 你可以是農(nóng)民, 可以是工程師妖爷, 可以是演員蝶涩, 可以是流浪漢, 但你必...
    萬(wàn)事從容閱讀 218評(píng)論 0 0
  • 這兩天做了幾件糊涂的事絮识,早起做飯绿聘,豆?jié){機(jī)打黑米糊,只放了水而忘了放黑米次舌,只加了輔料燕麥和黑芝麻熄攘,結(jié)果做成了清水糊,...
    茜茜媽媽閱讀 187評(píng)論 0 0
  • 剛進(jìn)門(mén)的找著方向彼念, 找了方向的且行且浪挪圾, 還有離別的相聚一堂, 作別大學(xué)時(shí)光逐沙。 那一些下一年畢業(yè)的哲思, 最是迷茫, ...
    寂寞空間閱讀 74評(píng)論 0 0