新聞中心
android的生命周期
單個(gè)Actiivty正常的生命周期
公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出定日免費(fèi)做網(wǎng)站回饋大家。
onCreate - onStart - onResume - onPause - onStop - onDestory
這就是一個(gè)Activity從被創(chuàng)建到被銷毀過程。
其中正常運(yùn)行狀態(tài)為onResume
當(dāng)Activity從前臺(tái)被置于后臺(tái),
onResume - onPause - onStop
當(dāng)從后臺(tái)重新置于前臺(tái)
onStop - onPause - onResatrt - onStart- onResume
其中可以發(fā)現(xiàn),只要Activity置于前臺(tái)都會(huì)執(zhí)行onStart函數(shù),所以我們可以考慮在這里做一下需要在前臺(tái)就處理的邏輯
各個(gè)生命周期函數(shù):
onCreate: Activity被創(chuàng)建,此時(shí)Activity處于不可見、不可交互
onStart: 此時(shí)Activity 部分可見不可交互
onRestart: Activity從后臺(tái)重新回到前臺(tái),部分可見不可交互
onResume: 完全可見可交互,為Activity正常運(yùn)行狀態(tài)
onPause: Activity處于暫停,從前臺(tái)被置于后臺(tái) 部分可見部分不可見,不可交互
onStop: 完全置于后臺(tái),完全不可見,
onDestroy: Activity被銷毀
上面就是一個(gè)正常的Activity的生命周期,
在Activity生命周期中,還設(shè)計(jì)一些其他:
Activity旋轉(zhuǎn):
onCreate - onStart - onResume
此時(shí)被旋轉(zhuǎn)
- onPause - onSaveInstanceState - onStop - onDestroy - onCreate - onStart - onRestoreInstanceState - onResume
可以發(fā)現(xiàn)當(dāng)Activity被旋轉(zhuǎn)時(shí),整個(gè)Activity是被銷毀然后重新創(chuàng)建的。其中新增調(diào)用了兩個(gè)生命周期函數(shù)
onSaveInstanceState: 當(dāng)Activity被系統(tǒng)異常銷毀時(shí)被調(diào)用,用于存儲(chǔ)數(shù)據(jù),用于系統(tǒng)恢復(fù)Activity時(shí)恢復(fù)數(shù)據(jù)
onRestoreInstanceState: 當(dāng)Actiivty被系統(tǒng)異常銷毀并重新創(chuàng)建時(shí),取出在onSaveInstanceState時(shí)存儲(chǔ)的數(shù)據(jù)
注意,在onCreate函數(shù)中,其實(shí)也是有參數(shù)的
此處的savedInstanceState也是在onSaveInstanceState時(shí)存儲(chǔ)的數(shù)據(jù),但此處可能為nll,
因?yàn)樵谡5腁ctivity時(shí),此處就是null,只有在Activity被異常銷毀然后被系統(tǒng)重新創(chuàng)建時(shí),此處才有值。
如果要在此處使用,切記要判空。
onNewIntent與Activity的啟動(dòng)模式有關(guān)
當(dāng)Activity未設(shè)置啟動(dòng)模式時(shí),則不會(huì)觸發(fā)該生命周期函數(shù)
當(dāng)Activity已經(jīng)處于應(yīng)用的Activity棧中
onNewIntent只會(huì)在Activity設(shè)置了啟動(dòng)模式,并且Activity被復(fù)用時(shí)才會(huì)調(diào)起。
注意:只對(duì)startActivityForResult調(diào)起的Activity起作用,statActivity本質(zhì)調(diào)用的也是startActivityForResult,Activity正常的切換前后臺(tái)時(shí)不會(huì)觸發(fā)的。
A - B:
A正常運(yùn)行處于 onResume,打開B
A onPause - B onCreate - B onStart - B onResume - A onStop
點(diǎn)擊跳入B頁面, 首先A進(jìn)入暫停,B開始創(chuàng)建,到onResume完全可見可交互,于是A被完全遮擋,變成完全不可見、處于后臺(tái),進(jìn)入onStop
A - B -goBack- A
在B頁再執(zhí)行返回
B onPause - A onRestart - A onStart - A onResume - B Stop - B onDestory
和A進(jìn)入B類似,B返回A時(shí),B進(jìn)入暫停,A變得重新可見到A完全可見,進(jìn)入onResume,然后B進(jìn)入停止,并銷毀
B啟動(dòng)模式設(shè)置為 SingleTop,B - B
B onPause - B onNewIntent - B onResume
因?yàn)?B已經(jīng)處于棧頂,啟動(dòng)模式為 SingleTop 則不會(huì)重新創(chuàng)建B的實(shí)例
將A的啟動(dòng)模式設(shè)置為SingleTask
可以通過在andorid studio的終端 Terminal中輸入:adb shell dumpsys activity
查看當(dāng)前應(yīng)用的Activity task棧
Android基礎(chǔ)之Activity生命周期
Activity是Android最常用的四大組件之一,Activity是Android應(yīng)用中與用戶交互的界面,通常一個(gè)activity就是一個(gè)屏幕,Activity一共有四種狀態(tài),Active/Running(當(dāng)Activity可見且可以與用戶交互);Paused(當(dāng)Activity可見但是不可交互);Stoped(當(dāng)Activity被完全覆蓋不可見);Killed(當(dāng)Activity被系統(tǒng)從內(nèi)存中刪除).其生命周期如下圖:
相關(guān)方法及作用:
1 onCreate:當(dāng)Activity創(chuàng)建時(shí)僅且調(diào)用一次,該方法主要適用于初始化頁面。
2 onStart:當(dāng)Activity調(diào)用onCreate方法之后,然后調(diào)用此方法開啟Activity,Activty此時(shí)可見但不可交互。
3 onResume:此時(shí)Activity在前臺(tái)可見且可與用戶交互。適合做UI更新操作。
4 onPouse:當(dāng)Activity被另外一個(gè)Activity覆蓋時(shí)調(diào)用該方法。
5 onStop:當(dāng)Activity在前臺(tái)不可見或者Activity在銷毀前調(diào)用此方法,此方法適合做一些資源的回收操作。
6 onDestroy:當(dāng)activity被銷毀時(shí)調(diào)用此方法。
問題:
1)onCreate 和 onStart 方法的區(qū)別
a.執(zhí)行次數(shù)不同,onCreate只執(zhí)行一次,而onStart可以執(zhí)行多次。
b.在activity的狀態(tài)不同,onCreate被調(diào)用時(shí)Activity的狀態(tài)還是未可見,而調(diào)用onStart時(shí)已可見。
2) onStart 和 onStop的區(qū)別
在執(zhí)行onStart或者onStop時(shí),Activity都是不可交互的,執(zhí)行onStart時(shí)Activity在前臺(tái)不可見,在后臺(tái)可見。而執(zhí)行onStop時(shí)Activity前后臺(tái)都不可見。
3)onResume 和 onPouse的區(qū)別
在執(zhí)行onResume時(shí),Activity在前臺(tái)是可見的且可以與用戶交互的。而執(zhí)行onPouse時(shí)Activity在前臺(tái)有可能可見,Activity沒有獲取到焦點(diǎn),此時(shí)不可與用戶交互。
android 生命周期 有什么用
在 Android 中,多數(shù)情況下每個(gè)程序都是在各自獨(dú)立的 Linux 進(jìn)程中運(yùn)行的。當(dāng)一個(gè)程序或其某些部分被請(qǐng)求時(shí),它的進(jìn)程就“出生”了;當(dāng)這個(gè)程序沒有必要再運(yùn)行下去且系統(tǒng)需要回收這個(gè)進(jìn)程的內(nèi)存用于其他程序時(shí),這個(gè) 進(jìn)程就“死亡”了。可以看出,Android 程序的生命周期是由系統(tǒng)控制而非程序自身直接控制。這和我們編寫桌面應(yīng)用程序時(shí)的思維有一些不同,一個(gè)桌面應(yīng)用程序的進(jìn)程也是在其他進(jìn)程或用戶請(qǐng)求時(shí)被創(chuàng) 建,但是往往是在程序自身收到關(guān)閉請(qǐng)求后執(zhí)行一個(gè)特定的動(dòng)作(比如從 main 函數(shù)中 return)而導(dǎo)致進(jìn)程結(jié)束的。要想做好某種類型的程序或者某種平臺(tái)下的程序的開發(fā),最關(guān)鍵的就是要弄清楚這種類型的程序或整個(gè)平臺(tái)下的程序的一般工作 模式并熟記在心。在 Android 中,程序的生命周期控制就是屬于這個(gè)范疇——我的個(gè)人理解:)
在 Android 系統(tǒng)中,當(dāng)某個(gè) activity調(diào)用 startActivity(myIntent) 時(shí),系統(tǒng)會(huì)在所有已經(jīng)安裝的程序中尋找其 intent filter 和 myIntent 最匹配的一個(gè) activity,啟動(dòng)這個(gè)進(jìn)程,并把這個(gè) intent 通知給這個(gè) activity。這就是一個(gè)程序的“生”。比如我們?cè)?Home application 中選擇 “Web browser”,系統(tǒng)會(huì)根據(jù)這個(gè) intent 找到并啟動(dòng) Web browser 程序,顯示 Web browser 的一個(gè) activity 供我們?yōu)g覽網(wǎng)頁(這個(gè)啟動(dòng)過程有點(diǎn)類似我們?cè)谠趥€(gè)人電腦上雙擊桌面上的一個(gè)圖標(biāo),啟動(dòng)某個(gè)應(yīng)用程序)。在 Android 中,所有的應(yīng)用程序“生來就是平等的”,所以不光 Android 的核心程序甚至第三方程序也可以發(fā)出一個(gè) intent 來啟動(dòng)另外一個(gè)程序中的一個(gè) activity。Android 的這種設(shè)計(jì)非常有利于“程序部件”的重用。
一個(gè) Android 程序的進(jìn)程是何時(shí)被系統(tǒng)結(jié)束的呢?通俗地說,一個(gè)即將被系統(tǒng)關(guān)閉的程序是系統(tǒng)在內(nèi)存不足(low memory)時(shí),根據(jù)“重要性層次”選出來的“犧牲品”。一個(gè)進(jìn)程的重要性是根據(jù)其中運(yùn)行的部件和部件的狀態(tài)決定的。各種進(jìn)程按照重要性從高到低排列如 下:
1. 前臺(tái)進(jìn)程。這樣的進(jìn)程擁有一個(gè)在屏幕上顯示并和用戶交互的 activity 或者它的一個(gè)IntentReciver 正在運(yùn)行。這樣的程序重要性最高,只有在系統(tǒng)內(nèi)存非常低,萬不得已時(shí)才會(huì)被結(jié)束。
2. 可見進(jìn)程。在屏幕上顯示,但是不在前臺(tái)的程序。比如一個(gè)前臺(tái)進(jìn)程以對(duì)話框的形式顯示在該進(jìn)程前面。這樣的進(jìn)程也很重要,它們只有在系統(tǒng)沒有足夠內(nèi)存運(yùn)行所有前臺(tái)進(jìn)程時(shí),才會(huì)被結(jié)束。
3. 服務(wù)進(jìn)程。這樣的進(jìn)程在后臺(tái)持續(xù)運(yùn)行,比如后臺(tái)音樂播放、后臺(tái)數(shù)據(jù)上傳下載等。這樣的進(jìn)程對(duì)用戶來說一般很有用,所以只有當(dāng)系統(tǒng)沒有足夠內(nèi)存來維持所有的前臺(tái)和可見進(jìn)程時(shí),才會(huì)被結(jié)束。
4. 后臺(tái)進(jìn)程。這樣的程序擁有一個(gè)用戶不可見的 activity。這樣的程序在系統(tǒng)內(nèi)存不足時(shí),按照 LRU 的順序被結(jié)束。
5. 空進(jìn)程。這樣的進(jìn)程不包含任何活動(dòng)的程序部件。系統(tǒng)可能隨時(shí)關(guān)閉這類進(jìn)程。
從某種意義上講,垃圾收集機(jī)制把程序員從“內(nèi)存管理噩夢”中解放出來,而 Android 的進(jìn)程生命周期管理機(jī)制把用戶從“任務(wù)管理噩夢”中解放出來。我見過一些 Nokia S60 用戶和 Windows Mobile 用戶要么因?yàn)殚L期不關(guān)閉多余的應(yīng)用程序而導(dǎo)致系統(tǒng)變慢,要么因?yàn)椴粫r(shí)查看應(yīng)用程序列表而影響使用體驗(yàn)。Android 使用 Java 作為應(yīng)用程序 API,并且結(jié)合其獨(dú)特的生命周期管理機(jī)制同時(shí)為開發(fā)者和使用者提供最大程度的便利。
android開發(fā)產(chǎn)品開發(fā)周期多久
產(chǎn)品的開發(fā)是長期的,是迭代的
每個(gè)迭代版本周期不等,有一周,有一個(gè)月的,也有可能更長
如果是單獨(dú)的項(xiàng)目開發(fā)一般在1-6月之間吧。
標(biāo)題名稱:android周期,android生命周期七種方法
新聞來源:http://www.ef60e0e.cn/article/hoidcc.html