Application的生命週期

2021-08-22 15:49:40 字數 1446 閱讀 4947

在多數情況下, 每個android應用執行在自己的linux程序中. 當乙個應用的某段code需要執行的時候這個程序將會被建立, 直到不再需要該應用或系統要為其他的應用釋放記憶體的時候才停止.

乙個非常重要且少有的特性是, 應用程序的存活時間不是由這個應用直接控制的. 而是由系統決定的, 系統會根據每個已知的正在執行的應用情況來定奪, 包括, 該應用對使用者的重要性和系統全部可用記憶體.

對於開發人員來講, 了解每個應用元件(尤其是, activity, service, 和intentreceiver)對於應用程序存活時間的影響是非常重要的. 如果沒有正確使用, 可能會導致應用程序在處理重要工作的時候被系統殺掉.

在對應用程序生命週期的理解中, 乙個典型的錯誤就是當乙個intentreceiver 接收到intent 之後, 會在自己的onreceiveintent()方法中開起乙個執行緒, 而後return這個方法. 一旦這個方法return, 系統會認為這個intentreceiver 不在處於活躍狀態, 也就認為他的宿主程序不再需要(除非還包有其他活躍的應用元件). 以至於當系統需要**記憶體的時候會隨時釋kill掉這個程序, 中止其中的子執行緒. 解決這個問題的辦法是在intentreceiver中啟動乙個service, 這樣系統會知道在這個程序中還有活躍的任務需要完成.

為了決定在記憶體較低的時候殺掉哪個程序, android會根據執行在這些程序內的元件及他們的狀態把程序劃分成乙個"重要程度層次". 其重要的程度按以下規則排序:

前端程序可以是乙個持有執行在螢幕最前端並與使用者互動的activity的程序(onresume方法被呼叫時),也可以是持有乙個正在執行的intentreceiver(也就是說他正在執行自己的onreceiveintent方法)的程序. 在系統中, 只會有少數這樣的程序, 並且除非記憶體已經低到不夠這些程序執行, 否則系統不會主動殺掉這些程序. 這時, 裝置通常已經達到了需要記憶體整理的狀態, 所以殺掉這些程序是為了不讓使用者介面停止響應.

可視程序是持有乙個被使用者可見, 但沒有顯示在最前端 (onpause方法被呼叫時) 的activity的程序. 舉例來說, 這種程序通常出現在乙個前端activity以乙個對話方塊出現並保持前乙個activity可見時. 這種程序被系統認為是極其重要的, 並且通常不會被殺掉, 除非為了保持所有前端程序正常執行不得不殺掉這些可見程序.

空程序是沒有持有任何活動應用元件的程序. 保留這種程序的唯一理由是為了提供一種快取機制, 縮短他的應用下次執行時的啟動時間. 就其本身而言, 系統殺掉這些程序的目的是為了在這些空程序和底層的核心快取之間平衡整個系統的資源.

當需要給乙個程序分類的時候, 系統會在該程序中處於活動狀態的所有元件裡掉選乙個重要等級最高作為分類依據. 檢視activity, service,和intentreceiver的文件, 了解每個元件在程序整個生命週期中的貢獻. 每乙個classes的文件詳細描述他們在各自應用的生命週期中所起得作用.

Application生命週期的學習

1 oncreate 在建立應用程式時建立 2 onterminate 當終止應用程式物件時呼叫,不保證一定被呼叫,當程式是被核心終止以便為其他應用程式釋放資源,那麼將不會提醒,並且不呼叫應用程式的物件的onterminate方法而直接終止進 程 3 onlowmemory 當後台程式已經終止資源還...

application使用,生命週期

總結為一下幾點 2.單例模式 3.用來共享資料,資料傳遞,資料快取。4.初始化變數,新增so庫等private string data public string getdata public void setdata string data 在activity中通過 進行資料共享。private ...

Application生命週期(一)

它的生命週期是整個程式執行中最長的 因為它是全域性的單例,所以在不同的activity和service中獲取的都是乙個物件。第乙個是在配置被改變時觸發 第二個是在程式建立時建立 第三個記憶體不夠時觸發 第四個當終止程式時呼叫 但是不能保證一定呼叫 第五個是在記憶體清理時觸發 1 2 author l...