1、活動狀態
每個活動在其生命周期中最多可能會有4中狀態。
(1)運行狀態
當一個活動位於返回棧的棧頂時,此時活動就處於運行狀態。系統不會回收處於運行狀態的活動。
(2)暫停狀態
當一個活動不再處於棧頂位置,但仍然可見時,這個活動就進入了暫停狀態。因為並不是每個活動都會占滿整個屏幕的,比如對話框形式的活動只會占用屏幕中間的部分區域。處於暫停狀態的活動仍然是完全存活着的,系統一般不會回收這種活動,只有在內存極低的情況下,系統才會主動考慮回收這種活動。
(3)停止狀態
當一個活動不再處於棧頂位置,並且完全不可見的時候,就進入了停止狀態。系統仍然會為這種活動保存相應的狀態和成員變量,但是這並不是完全可靠的,當其他地方需要內存時,處於停止狀態的活動有可能會被系統回收。
(4)銷毀狀態
當一個活動從返回棧中移除后就變成了銷毀狀態。系統就會回收這種狀態的活動,從而保證內存充足。
2、活動的生存周期
Activity 類中定義了7個回調方法,覆蓋了活動生命周期的每一個環節。
onCreate();
這個方法在活動第一次被創建的時候調用,在此方法中完成活動的初始化操作,比如加載布局、綁定事件等。
onStart();
這個方法在活動由不可見變為可見的時候調用。
onResume();
這個方法在活動准備好和用戶進行交互的時候調用。此時的活動一定位於返回棧的棧頂,並且處於運行狀態。
onPause();
這個方法在系統准備去啟動或者恢復另一個活動的時候調用。我們通常會在這個方法中將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。
onStop();
這個方法在活動完全不可見的時候調用。它和 onPause() 方法的主要區別:如果啟動的新活動是一個對話框式的活動,那么 onPause() 方法會得到執行,而 onStop() 方法並不會執行。
onDestroy();
這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態。
onRestart();
這個方法在活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。
以上 7 個方法中除了 onRestart() 方法,其他都是兩兩相對的,從而又可以將活動分為 3 中生存周期。
完整生存期
活動在 onCreate() 方法和 onDestroy() 方法之間所經歷的,就是完整生存期。一般情況下,一個活動會在 onCreate() 方法中完成各種初始化操作,而在 onDestroy() 方法中完成釋放內存的操作。
可見生存期
活動在 onStart() 方法和 onStop() 方法之間所經歷的,就是可見生存期。在可見生存期內,活動對於用戶總是可見的,即便有可能無法和用戶進行交互。我們可以通過這兩個方法,合理的管理那些對用戶可見的資源。比如在 onStart() 方法中對資源進行加載,在 onStop() 方法中對資源進行釋放,從而保證處於停止狀態的活動不會占用過多內存。
前台生存期
活動在 onResume() 方法和 onPause() 方法之間所經歷的就是前台生存期。在前台生存期內,活動總是處於運行狀態,此時的活動是可以和用戶進行交互的,平時看到和接觸最多的就是前台生存期下的活動。