Activity生命周期
一、如何創建Activity(活動)
1.Activity(活動):
2.新建一個類繼承自Activity(活動)
二、Activity(活動)的聲明周期從創建到銷毀的過程所要執行的方法
1.創建Activity(活動)所要執行的方法
a.onCreate()
這個方法你已經看到過很多次了,每個活動中我們都重寫了這個方法,它會在活動
第一次被創建的時候調用。你應該在這個方法中完成活動的初始化操作,比如說加載布
局、綁定事件等。
b.onStart()
這個方法在活動由不可見變為可見的時候調用。
c.onResume()
這個方法在活動准備好和用戶進行交互的時候調用。此時的活動一定位於返回棧的
棧頂,並且處於運行狀態。
2.Activity(活動)被銷毀時所執行的方法
a.onPause()
這個方法在系統准備去啟動或者恢復另一個活動的時候調用。我們通常會在這個方
法中將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度
一定要快,不然會影響到新的棧頂活動的使用。
b.onStop()
這個方法在活動完全不可見的時候調用。它和 onPause()方法的主要區別在於,如
果啟動的新活動是一個對話框式的活動,那么 onPause()方法會得到執行,而 onStop()
方法並不會執行。
c.onDestroy()
這個方法在活動被銷毀之前調用,之后活動的狀態將變為銷毀狀態。
3.onRestart()
這個方法在活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。
三、生命周期的分類
1. 完整生存期
活動在 onCreate()方法和 onDestroy()方法之間所經歷的,就是完整生存期。一般情
況下,一個活動會在 onCreate()方法中完成各種初始化操作,而在 onDestroy()方法中完
成釋放內存的操作。
2. 可見生存期
活動在 onStart()方法和 onStop()方法之間所經歷的,就是可見生存期。在可見生存
期內,活動對於用戶總是可見的,即便有可能無法和用戶進行交互。我們可以通過這兩
個方法,合理地管理那些對用戶可見的資源。比如在 onStart()方法中對資源進行加載,
而在 onStop()方法中對資源進行釋放, 從而保證處於停止狀態的活動不會占用過多內存。
3. 前台生存期
活動在 onResume()方法和 onPause()方法之間所經歷的,就是前台生存期。在前台
生存期內,活動總是處於運行狀態的,此時的活動是可以和用戶進行相互的,我們平時
看到和接觸最多的也這個狀態下的活動。
四.活動的注冊
2.Activity的四種啟動模式
一、Activity(活動)的管理模式
Android采用Task來管理多個Activity。當啟動一個APP時,Android就會為之創建一個Task,然后每啟動一個activity,則把當前的activity壓到棧頂。比如以此啟動頁面A->B->C,棧里面的結構如下所示
C------棧頂
B
A------棧底
按返回鍵的時候,從棧頂彈出頁面依次為C->B->A
二、Activity(活動)的四種啟動模式
1.standard模式
它是活動默認的啟動模式,在不進行顯示制定的情況下,所有活動都會自動使用這種啟動模式。每次通過此模式來啟動activity時,Android總會為目標activity啟動一個新的實例。
舉個例子:activity A為standard模式,activity B為standard模式,activity C為standard模式,從A->B->C依次啟動activity:
C為棧頂
B
A為棧低
按返回鍵的時候,從棧頂彈出頁面依次為C->B->A
2.singleTop模式
I.比如Activity B啟動模式為singleTop,Activity A為standard,此時從A頁面跳轉B頁面,A->B時,會先在棧中查看棧頂是否存在B,存在的話,則復用棧頂B,調用onNewIntent方法,而不是重新new一個新的B。如果棧中不存在B,則會創建B。
II.再繼續從B頁面跳轉B頁面的時候,及A->B->B時,因為棧頂已經存在B了,則直接復用棧頂的B,調用onNewIntent方法,此時棧如下所示:
B------棧頂
A------棧底
3.singleTask模式
使用這種加載模式的activity在同一個Task內只有一個實例,當系統采用此singleTask模式啟動activity時,可以分為三種情況:
a. 如果將要啟動的activity不存在,系統將會創建目標activity實例,並將它加入到Task棧頂。
b.如果將要啟動的activity已經位於Task棧頂,此時與singleTop模式的行為相同。
c. 如果將要啟動的activity已經存在,但沒有位於Task棧頂,系統將會把位於該activity上面的所有activity移出Task棧,從而使得目標activity轉入棧頂。
4.singleInstance模式
假設我們的程序中有一個活動是允許其他程序調用的,如果我們想實現其他程序和我們的程序可以共享這個活動的實例,應該如何實現呢?
使用前面三種啟動模式肯定是做不到的,因為每個應用程序都會有自己的返回棧,同一個活動在不同的返回棧中入棧時必然是創建了新的實例。而使用singleInstance 模式就可以解決這個問題,在這種模式下會有一個單獨的返回棧來管理這個活動,不管是哪個應用程序來訪問這個活動,都共用的同一個返回棧,也就解決了共享活動實例的問題。
此加載模式下,無論從哪個Task中啟動目標activity,只會創建一個目標activity實例,並會使用一個全新的Task棧來裝載該activity實例。當系統采用singleInstance模式啟動activity時,可以分為兩種情況:
a.如果將要啟動的activity不存在,系統會先創建一個全新的Task、再創建目標activity的實例,並將它加入新的Task的棧頂。
b. 如果將要啟動的activity已經存在,無論它位於哪個應用程序中,無論它位於哪個Task中,系統將會把該activity所在的Task轉到前台,從而使用該activity顯示出來。
activity-singleInstance模式:
activity-SingleTask模式:
activity-singleTop模式:
activity-standard模式