Activity(上)- 生命周期及狀態(tài)詳解

1. Activity 是什么

  1. An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.
    (一個activity是一個系統(tǒng)組件科吭,它能夠提供一個屏幕用來和用戶進(jìn)行交互操作以滿足用戶的需求吁峻,像打電話,照相,發(fā)郵件或者看地圖)
  2. 安卓系統(tǒng)的四大組件之一 案疲,很常見,想吃飯喝水一樣靴迫,基本所有的界面都是activity的界面或者是依附其生命周期的点弯。

2. Acctivity 的生命周期

上圖

官方生命周期 1.1
  • onCreate():activity被創(chuàng)建所調(diào)用的第一個方法(在我們的能力范圍內(nèi))。在這里需要做初始化的相關(guān)工作榛了,包括設(shè)置視圖在讶,聲明一些變量,注冊事件霜大,也可以解析一些數(shù)據(jù)(from intent)
  • onStart(): 表示activity正在被啟動构哺,即將開始,activity正在從不可見到可見战坤。注此時activity還在后臺
  • onResume():
    • activity已經(jīng)可見曙强,開始活動,此時activity一定是處于任
      務(wù)棧的棧頂途茫,一定是在前臺碟嘴。注意和onstart區(qū)分
    • 來自onpause 的恢復(fù)回調(diào)。
  • onPause(): 表示當(dāng)前的activity正在停止囊卜,通常發(fā)生于:
    • 在當(dāng)前的activity上展示來了一個控件(dialog)
      在這個方法下可以停止當(dāng)前activity的動畫(半透明背景下activity 還在畫動畫臀防,容易使用戶分心眠菇,同事也會占用系統(tǒng)資源),也可以做一些存儲工作袱衷,但是 不能是耗時操作捎废,不然會影響后續(xù)的展現(xiàn)(比如影響新的activity的創(chuàng)建)
  • onStop():表示activity正在停止,當(dāng)activity完全不可見的時候調(diào)用(這里會涉及到一個面試問題致燥,后面講)可以做一些資源回收操作登疗,但是也不能太耗時。
  • onRestart():表示activity正在重新啟動嫌蚤,一般情況辐益,當(dāng)activity從不可見變成可見的時候,改方法就會被調(diào)用脱吱,比如
    • 啟動了一個新的activity之后按了返回
    • 用戶按了home之后又從菜單恢復(fù)
  • onDestory: 表示activity正在被銷毀智政,可以做回收工作,資源釋放箱蝠,各種綁定解除啊什么的续捂。

onpause涉及到的面試題,啟動一個新的activity宦搬,著兩個activity的生命周期方法的調(diào)用順序

A.onpause->B.oncreate->B.onstart->B.onResume->A,onstop牙瓢。

另外一點(diǎn)需要注意,當(dāng)activity處理onpause和onstop狀態(tài)下间校,存在被系統(tǒng)回收(kill)的可能性矾克,從圖中可以看出,這種情況下憔足,是不會調(diào)用ondestory 方法的胁附。這時候調(diào)用的是onSaveinstance和onRestoreInstance,著兩個方法只會出現(xiàn)在activity異常終止的情況下(橫豎屏切換滓彰,系統(tǒng)回收)汉嗽,onSave 方法的調(diào)用時在onstop方法之前。當(dāng)activity被重新創(chuàng)建的時候找蜜,系統(tǒng)會把onsave 保存的 bundle 同事傳給oncreate和 onrestore,onstore方法在onstart方法之后被調(diào)用稳析。注 這兩個方法會為我們默認(rèn)做一些恢復(fù)工作洗做,比如文本框用戶輸入的數(shù)據(jù)
也可以在oncreate里這么用

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        
        if (null != savedInstanceState){
            String storeData = savedInstanceState.getString("data");
            // TODO: 2017/3/8 deal with save data  
        }
    }

是不是到這里才明白o(hù)ncreate的這個參數(shù)有什么作用呢

@Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        // TODO: 2017/3/8 u can also do something to recover 
    }

也可以調(diào)用這個。

activity的狀態(tài)

算是科普吧彰居,android是使用任務(wù)來管理活動的诚纸,任務(wù)是針對activity的集合,一個任務(wù)就是一組放在棧里的activity集合陈惰,這個棧就是任務(wù)棧(返回棧)畦徘,棧是從數(shù)據(jù)結(jié)構(gòu)上來管理任務(wù),android系統(tǒng)總是會顯示處于棧頂?shù)腶ctivity
1.四種狀態(tài)
每個activity在其生命周期內(nèi)最多會經(jīng)歷四種狀態(tài)

  • 運(yùn)行狀態(tài):當(dāng)activity處于棧頂時,它就是運(yùn)行狀態(tài)
  • 暫停狀態(tài):當(dāng)activity不在處于棧頂井辆,但是仍然可見(部分或者全部)关筒,這時activity就處于暫停狀態(tài)。注:只有在系統(tǒng)內(nèi)存極低的時候才會回收
  • 停止?fàn)顟B(tài):當(dāng)activity不再處于棧頂且完全不可見的時候杯缺,這種狀態(tài)下這個activity是否繼續(xù)存活取決于系統(tǒng)會不會收拾掉他蒸播,一般來講,沒有內(nèi)存不足的情況的話萍肆,系統(tǒng)會為你保留的袍榆,祈禱吧。
  • 銷毀狀態(tài): 從任務(wù)棧中移除了塘揣。一旦移除包雀,系統(tǒng)更加會回收這種activity以保證手機(jī)的內(nèi)存充足。

------------------------------------------------------Have A Nice Day -----------------------------------------------------

未完待續(xù)亲铡,下一篇Activity(中)- Activity啟動模式詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末才写,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奴愉,更是在濱河造成了極大的恐慌琅摩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锭硼,死亡現(xiàn)場離奇詭異房资,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)檀头,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門轰异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人暑始,你說我怎么就攤上這事搭独。” “怎么了廊镜?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵牙肝,是天一觀的道長。 經(jīng)常有香客問我嗤朴,道長配椭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任雹姊,我火速辦了婚禮股缸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吱雏。我一直安慰自己敦姻,他們只是感情好瘾境,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镰惦,像睡著了一般迷守。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陨献,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天盒犹,我揣著相機(jī)與錄音,去河邊找鬼眨业。 笑死急膀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的龄捡。 我是一名探鬼主播卓嫂,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼聘殖!你這毒婦竟也來了晨雳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤奸腺,失蹤者是張志新(化名)和其女友劉穎餐禁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體突照,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帮非,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讹蘑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末盔。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖座慰,靈堂內(nèi)的尸體忽然破棺而出陨舱,到底是詐尸還是另有隱情,我是刑警寧澤版仔,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布游盲,位于F島的核電站,受9級特大地震影響蛮粮,放射性物質(zhì)發(fā)生泄漏益缎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一蝉揍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畦娄,春花似錦又沾、人聲如沸弊仪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽励饵。三九已至,卻和暖如春滑燃,著一層夾襖步出監(jiān)牢的瞬間役听,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工表窘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留典予,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓乐严,卻偏偏與公主長得像瘤袖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昂验,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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