自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

移動開發(fā) Android
Android各個(gè)應(yīng)用在運(yùn)行時(shí)的進(jìn)程管理和內(nèi)存管理都是相對獨(dú)立的,Android應(yīng)用程序并不能控制自己的生命周期。本文將介紹如何控制應(yīng)用程序生命周期。

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

一、前言

與大多數(shù)傳統(tǒng)的操作系統(tǒng)環(huán)境不同,Android應(yīng)用程序并不能控制自己的生命周期。所以應(yīng)用的各個(gè)組件(activity,Service……)就得時(shí)刻小心的監(jiān)聽?wèi)?yīng)用的狀態(tài)變化對它們的影響,防止在不適當(dāng)?shù)臅r(shí)機(jī)被終止掉。(可能會造成數(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)存管理都是相對獨(dú)立的。Android使用一種“侵占性”的方式管理系統(tǒng)資源,這意味著為了釋放資源給高優(yōu)先級的程序(通常情況下是正在與用戶進(jìn)行直接交互的程序),某些進(jìn)程及其宿主程序?qū)跊]有任何提示警告的情況下被無情的結(jié)束。

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

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

 


圖示:各種進(jìn)程及其對應(yīng)的優(yōu)先級

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

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

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

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

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

Visible Process 可視化,但是不處于活動狀態(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)行才會被結(jié)束掉。

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

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

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

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

 

【編輯推薦】

  1. Nexus One作為Android測試機(jī)型
  2. Android平臺添新玩意 PHP將實(shí)現(xiàn)應(yīng)用
  3. Google發(fā)布Android 2.2版本 超20項(xiàng)重要改動
責(zé)任編輯:張攀 來源: cnblogs
相關(guān)推薦

2015-07-09 15:42:48

ios應(yīng)用生命周期

2013-07-31 14:50:32

Windows PhoWP應(yīng)用程序生命周期

2009-06-24 10:34:39

JSF生命周期JSF應(yīng)用程序

2011-07-20 15:58:58

iPhone 應(yīng)用程序 生命周期

2014-02-24 10:50:32

DevOps云應(yīng)用

2014-07-11 11:09:10

App應(yīng)用程序生命周期

2011-08-10 16:50:10

iPhone生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2023-12-21 08:00:00

ChatGPT人工智能大型語言模型

2025-04-28 01:22:00

2014-09-28 11:28:02

Android應(yīng)用程序生命周期

2012-08-16 09:38:38

ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2012-06-20 10:29:16

敏捷開發(fā)

2009-06-05 11:14:15

Web程序生命周期OSGi Web容器

2014-07-16 13:39:30

Windows Pho

2011-06-16 09:31:21

ActivityAndroid

2010-01-26 17:00:31

Android生命周期

2009-05-21 09:12:41

Java開發(fā)平臺生命周期管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號