計算機套用技術專業畢業設計:Android手機播放器

android應用程式的生命周期是由android框架進行管理,而不是由應用程式直接控制。通常,每一個應用程式(入口一般會是一個活動的oncreate方法),都會占據一個進程。當系統記憶體即將不足的時候,會依照優先權自動進行進程的回收。不管是使用者或開發者,都無法確定應用程式何時會被回收。關於進程的生命周期將在下一節中介紹,本節主要介紹活動的生命周期。

一個活動類別除了oncreate方法之外,還預先定義了onpause(暫停)、onresume(繼續)等的基本方法,當從一個活動切換到另一個活動的時候,原來的活動將經過一連串的狀態改變。開發者可以在程式中添加一些各狀態相對應的流程,每次活動狀態改變時,就會執行相對應的流程。要讓用戶有好的使用體驗,活動需要在各個周期中負責保管狀態、恢復狀態、傳送資料等工作。

3.4.1活動的生命狀態

android的虛擬機是使用堆疊管理。主要有四種狀態:

(l)活動狀態

活動狀態是指用戶啟動應用程式或活動後,活動運行中的狀態。在android平台上,同一個時刻只會有一個活動處於活動或運行狀態。其他的活動都處於未啟動、停止或是暫停的狀態。

(2)暫停狀態

暫停狀態是指當活動暫時暗下來,退到背景畫面的狀態。當警告對話框或電話來了時,都會讓原來運行的活動退到背景畫面。新出現的警告對話框等界面元件蓋住了原來的活動畫面。活動處在暫停狀態時,用戶無法與原活動互動。

(3)停止狀態

停止狀態是指有其他活動正在執行,而這個活動己經離開螢幕,不再動作的狀態。通過按返回鍵,可以調出所有處於停止狀態的應用程式列表。處於停止狀態的活動,還可以通過通知來喚醒。

(4)已回收或未啟動狀態

已回收或未啟動狀態是指活動尚未被啟動、已經被手動終止或己經被系統回收的狀態。要手動終止活動,可以在程式中調用finish方法。如果是被系統回收,可能是因為記憶體不足了,所以系統根據記憶體不足時的回收規則,將處於停止狀態的活動所占用的記憶體回收。

圖3-1  android活動生命周期

圖3-1所示的七個狀態又可以歸納成三組:

(l)資源分配(創建/銷毀)

完整的活動生命周期由創建狀態開始,由銷毀狀態結束。創建時分配資源,銷毀時釋放資源。

(2)可見與不可見(啟動/重新啟動/停止)

當活動運行到啟動狀態時,就可以在螢幕上看到這個活動。相反地,當活動運行到停止狀態時,這個活動就會從螢幕上消失。當用戶按下返回鍵回到上一個活動時,會先到重新啟動狀態,再到一般的啟動狀態。

(3)用戶取得螢幕的控制權(繼續/暫停)

當有個警告對話框、簡訊、電話等信息進入時,原來的活動會進入暫停狀態,暫時放棄螢幕的控制權,被中斷到背景去,將前景交給優先權高的事件。當這些優先權高的事件處理完後,活動就改進入繼續狀態,此時又取得螢幕的控制權。

3.4.2活動的運作流程

由實際運行來看,我們可以歸納出所有android應用程式都遵循的運作流程:

(l)一般啟動

啟動一個活動的基本流程為oncreate一>onstart一>onresume。該流程首先分配資源給這個活動(創建狀態),然後將活動的內容顯示到螢幕上(啟動狀態);在一切就緒後,取得螢幕的控制權(恢復狀態),用戶可以開始使用這個程式。

(2)調用另一個活動

調用另一個活動的基本流程為onpause(l)一>oncreate(2)一>onstart(2)一>0nresume(2)一>onstop(l)。該流程首先凍結原來的活動,再交出螢幕控制權;直到活動2完成一般啟動流程後,活動1才會被停止。

(3)回到原來活動

回到原來活動的基本流程為onpause(2)一>onrestart(1)一>onstart(l)一>onresume(1)一>onstop(2)一>ondestroy(2)。另外按返回鍵也可以回到原來的活動。

(4)退出結束

退出結束的基本流程為onpause一>onstop一>ondestroy。如果程式中有直接調用finish方法來關閉活動的話,系統會跳過先凍結的階段,直接暫停,停止,然後銷毀。

(5)回收後再啟動

回收後再啟動的基本流程為oncreate一>onstart一>onresume。如果被回收掉的活動一旦又重新被調用時,會像一般啟動一樣再次調用活動的oncreate方法。

當在模擬器上已經執行過多個應用程式,只要按下返回鍵,就會開啟最近一次開啟過的活動。這時要是按下多次返回鍵,理論上遲早會返回到某個已經銷毀的活動。

如果應該開啟的活動己經被回收了,那么這個活動會再次被創建。再次被創建的活動,跟原來開啟過的活動是不一樣的。

所以如果要讓再次被創建的活動跟原來開啟過的一樣,那么在活動之間切換時,就要保存資料:即在每次活動運行到暫停或停止狀態時先保存資料,然後在創建時將資料讀出來。