溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在Android平臺(tái)下如何控制應(yīng)用程序生命周期

發(fā)布時(shí)間:2021-11-11 16:15:17 來(lái)源:億速云 閱讀:152 作者:柒染 欄目:移動(dòng)開(kāi)發(fā)

本篇文章為大家展示了在Android平臺(tái)下如何控制應(yīng)用程序生命周期,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

我們向很多朋友介紹過(guò)Android特有的虛擬機(jī):Dalvik虛擬機(jī)工作原理介紹。Android各個(gè)應(yīng)用在運(yùn)行時(shí)的進(jìn)程管理和內(nèi)存管理都是相對(duì)獨(dú)立的,Android應(yīng)用程序并不能控制自己的生命周期。小編將介紹如何控制應(yīng)用程序生命周期。

一、前言

與大多數(shù)傳統(tǒng)的操作系統(tǒng)環(huán)境不同,Android應(yīng)用程序并不能控制自己的生命周期。所以應(yīng)用的各個(gè)組件(activity,Service……)就得時(shí)刻小心的監(jiān)聽(tīng)?wèi)?yīng)用的狀態(tài)變化對(duì)它們的影響,防止在不適當(dāng)?shù)臅r(shí)機(jī)被終止掉。(可能會(huì)造成數(shù)據(jù)丟失哦)

在Android中每個(gè)應(yīng)用都具有獨(dú)立的進(jìn)程運(yùn)行在獨(dú)立的Dalvik(Android特有的虛擬機(jī))。各個(gè)應(yīng)用在運(yùn)行時(shí)的進(jìn)程管理和內(nèi)存管理都是相對(duì)獨(dú)立的。Android使用一種“侵占性”的方式管理系統(tǒng)資源,這意味著為了釋放資源給高優(yōu)先級(jí)的程序(通常情況下是正在與用戶進(jìn)行直接交互的程序),某些進(jìn)程及其宿主程序?qū)?huì)在沒(méi)有任何提示警告的情況下被無(wú)情的結(jié)束。

二、理解應(yīng)用的優(yōu)先級(jí)和進(jìn)程狀態(tài)

結(jié)束一些進(jìn)程是為了釋放回收資源,那么那些進(jìn)程會(huì)被結(jié)束?是A先結(jié)束還是B先結(jié)束呢?這決定于宿主應(yīng)用程序的優(yōu)先級(jí)了。一個(gè)應(yīng)用的優(yōu)先級(jí)等同于具有***優(yōu)先級(jí)的組件的優(yōu)先級(jí)。如果此刻兩個(gè)程序具有相同的優(yōu)先級(jí),那么曾經(jīng)哪個(gè)進(jìn)程處于低優(yōu)先級(jí)的時(shí)間較長(zhǎng),就會(huì)被結(jié)束掉。進(jìn)程的優(yōu)先級(jí)受到進(jìn)程間附屬關(guān)系的影響,比如A應(yīng)用依賴的Service或者Content Provider是由B應(yīng)用提供的,那么B將會(huì)具有更高的優(yōu)先級(jí)。所有的Android應(yīng)用都會(huì)遺留在內(nèi)存中運(yùn)行,直到系統(tǒng)需要釋放回收資源才會(huì)被結(jié)束掉。

在Android平臺(tái)下如何控制應(yīng)用程序生命周期
圖示:各種進(jìn)程及其對(duì)應(yīng)的優(yōu)先級(jí)

Activity Process 活動(dòng)進(jìn)程是其宿主程序更用戶直接交互的組件,Android會(huì)嘗試通過(guò)回收各種資源來(lái)保證其運(yùn)行狀態(tài)。此類進(jìn)程數(shù)量少,通常是***被結(jié)束掉的。

活動(dòng)進(jìn)程包含下面幾種:

Activity處于激活狀態(tài),也就是說(shuō)處于foreground,接收響應(yīng)用戶事件;

Activities, Services, or Broadcast Receivers 正在執(zhí)行處理OnReceive 事件;

Services 正在執(zhí)行處理 onStart, onCreate, or onDestroy 事件.

Visible Process 可視化,但是不處于活動(dòng)狀態(tài)的Activity。它們不處于foreground也不接受響應(yīng)用戶事件。這中情況發(fā)生在Activity有部分被覆蓋了(比如我們點(diǎn)擊A里面的一個(gè)按鈕,彈出一個(gè)Dialog,此時(shí)A就變成一個(gè)可視進(jìn)程)??梢曔M(jìn)程同樣很少,只有在極端的情況下,為了保證Activity Process的運(yùn)行才會(huì)被結(jié)束掉。

Started Service Process 注意,是啟動(dòng)后的服務(wù)進(jìn)程。服務(wù)進(jìn)程需要在沒(méi)有可視化界面的情況下持續(xù)運(yùn)行,因?yàn)榉?wù)沒(méi)有和用戶直接交互。它們依然被認(rèn)為是前臺(tái)進(jìn)程,只有當(dāng)Visible和Activity Process需要資源的時(shí)候才會(huì)被結(jié)束。

Background Process 一個(gè)進(jìn)程附屬在不可視的Activity 也沒(méi)有任何啟動(dòng)的服務(wù)進(jìn)程就變成了后臺(tái)進(jìn)程。通常情況下Android里面會(huì)有一大堆后臺(tái)進(jìn)程,Android用 last-seen-first-killed 這種方式來(lái)結(jié)束此類進(jìn)程,從而為foreground進(jìn)程提供資源。

Empty Process 為了改善整個(gè)系統(tǒng)的性能,Android會(huì)在內(nèi)存中保留已經(jīng)結(jié)束生命周期的應(yīng)用程序。Android保留這些緩存為了是應(yīng)用能夠快速啟動(dòng)。它們將會(huì)按照一貫的情況被結(jié)束掉。

綜上所述,正確的組織應(yīng)用程序,確保穩(wěn)定運(yùn)行,防止運(yùn)行中途被終止是非常重要的。

上述內(nèi)容就是在Android平臺(tái)下如何控制應(yīng)用程序生命周期,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI