Android被設(shè)計用于開發(fā)獨特要求的移動應(yīng)用程序。尤其,Android認為大多數(shù)移動設(shè)備上的資源(例如:內(nèi)存和電池)是有限的,并提供了一些機制以保持這些資源。這些機制也體現(xiàn)在AndroidActivity生命周期中,生命周期描繪了一個Activity從創(chuàng)建到完成運行的過程中的狀態(tài)或事件。這個生命周期也可以概略的用下圖來描述:
圖:Android Activity生命周期
通過對Activity類的事件方法重載以及實例化方法,你的Activity將監(jiān)視并且相應(yīng)下面這些事件:
onCreate
當(dāng)你的Activity被第一次創(chuàng)建時調(diào)用。在這個地方你將創(chuàng)建你的視圖,打卡你的Activity需要使用的任何持久數(shù)據(jù)文件,并且初始化你的Activity。當(dāng)調(diào)用onCreate時,Android框架將同時傳遞一個以前運行該Activity存儲的狀態(tài)Bundle對象。
onStart
在你的Activity顯示到屏幕之前調(diào)用。一旦onStart運行完畢,如果你的Activity能夠成為顯示于屏幕的前端Activity,控制將會傳遞到onResume。如果這個Activity不能成為運行于屏幕的前端Activity,控制將傳遞到onStop方法。
onResume
當(dāng)你的Activity成為屏幕前端Activity后onResume將被立刻調(diào)用。在這個時間點你的Activity處于運行狀態(tài)并且能與用戶進行交互。你可以接受鍵盤和觸摸輸入,并在屏幕上顯示你的用戶界面。當(dāng)你的Activity失去屏幕前端焦點時onResume也會被調(diào)用,并且這個Activity最終退出,而另一Activity將被彈到前端。這也是你的Activity將開始(或恢復(fù))的地方,并且可以做一些需要的事情比如更新用戶界面(例如:接收位置更新或者運行一個動畫)。
onPause
當(dāng)Android試圖恢復(fù)一個不同的后端Activity到前端時調(diào)用。在這個時候你的Activity將不能在訪問屏幕,所以你應(yīng)該做一些節(jié)約電池和CPU周期的事情。如果你在運行一個動畫,那么將不會有人再看到它,所以你應(yīng)該暫停它的運行知道它再次被切換到屏幕前端。你的Activity需要利用這個方法去保存再次恢復(fù)它到前端的需要的任何狀態(tài)——當(dāng)然不需要擔(dān)保你的Activity一定將被恢復(fù)。如果你的移動設(shè)備運行出現(xiàn)內(nèi)存溢出,并且沒有磁盤上也沒有可用的虛擬內(nèi)存擴展,那么你的Activity可能必須為需要內(nèi)存的系統(tǒng)進程讓路。一旦你退出此方法,Android可能在任何時候殺掉你的Activity而不會返回任何控制。
onStop
當(dāng)你的Activity不再可見時調(diào)用,或者當(dāng)另一個Activity被拿到前端或者你的Activity被銷毀時也會調(diào)用此方法。
onDestroy
在你的Activity被銷毀之前你還有一次機會可以做任何操作。通常你到達這個時間點是因為Activity已經(jīng)完成框架也會調(diào)用它的完成方法。但是如先前所說,調(diào)用這方法還因為Android需要回收你的Activity消費的資源。
利用這些方法盡可能提供最好的用戶體驗是重要的。這也是本書討論移動變成與桌面編程之間有何不同的第一個地方,在后面的章節(jié)中還會有許多類似的地方。如果你在編寫眾多Activity時考慮到Activity生命周期,你的用戶將會滿意而且你也將最終受益。
上面這段文章翻譯自:
Android Application Development
O'Reilly May 2009: First Edition
ISBN: 978-0-596-52147-9
by Rick Rogers, John Lombardo, Zigurd Mednieks, and BlakeMeike