Activity生命週期之我見

關於Activity生命週期的文章很多,而且大部分也說得很詳細,所以作爲關於這方面的內容我本來不想多說,但是大家可能跟我之前一樣,在看這方面的內容的時候都能很容易地看懂,但是過幾天又忘了,或者在用的程序中跳轉較多的情況下容易混淆。

這是因爲沒有真正的理解,或者是沒有很好的方法來記憶,所以在這裏我就說一下我對Activity生命週期的一些記憶的方式,希望對大家能夠有所幫助。

Activity生命週期的基本內容我就不多說了,網上一搜一大把,官方文檔也說得很詳細。總之,我們知道Activity從創建到銷燬有多種狀態,從一種狀態到另一種狀態時會激發相應的回調方法,這些回調方法包括:

onCreate 、onStart 、onResume 、onPause 、onStop 、onDestroy 、onRestart

下面這張圖就是我的記憶的方式:


不難看出,其實這些方法都是兩兩對應的,onCreate創建與onDestroy銷燬;onStart可見與onStop不可見;onResume可編輯(即焦點)與onPause;這6個方法是相對應的,那麼就只剩下一個onRestart方法了,這個方法在什麼時候調用呢?答案就是:在Activity被onStop後,但是沒有被onDestroy,在再次啓動此Activity時就調用onRestart(而不再調用onCreate)方法;如果被onDestroy了,則是調用onCreate方法。

這樣大家就應該能夠很容易的記住這些方法了。下面再通過一個比喻來看兩個Activity的切換過程。

我們把Activity比作一本書,我們要看書,首先從書架上取出書(onCreate),然後放到桌上(onStart),接着打開書(onResume),這樣我們就可以看書並可以在書本上寫字了。

如果這時候我們要啓動另一個Activity,也就是要看另一本書,首先我們放下手中的筆或者說合上書(onPause),然後從書架上拿下另一本書(書2:onCreate),然後把書本2放到桌上並打開(書2:onStart、onResume)。

如果書本1被書本2完全蓋住了,即不可見了,就調用書本1的onStop;而如果書本2較小,沒有完全蓋住書本1,則不會調用。

我們還可以把書本1放回書架上,即onDestroy。

另外,還有一點要注意,Activity在處於onPause、onStop、onDestroy狀態下,系統都可以銷燬該Activity所在進程,所以我們在處理一些要保存的數據時,必須在onPause方法中進行,因爲onStop和onDestroy方法不一定會被調用。

OK,就說這麼多……

此文來源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章