Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> 在Android平台下如何控制應用程序生命周期

在Android平台下如何控制應用程序生命周期

編輯:高級開發

我們向很多朋友介紹過android特有的虛擬機:Dalvik虛擬機工作原理介紹。android各個應用在運行時的進程管理和內存管理都是相對獨立的,android應用程序並不能控制自己的生命周期。本文將介紹如何控制應用程序生命周期。

一、前言

與大多數傳統的操作系統環境不同,android應用程序並不能控制自己的生命周期。所以應用的各個組件(activity,Service……)就得時刻小心的監聽應用的狀態變化對它們的影響,防止在不適當的時機被終止掉。(可能會造成數據丟失哦)

在Android中每個應用都具有獨立的進程運行在獨立的Dalvik(Android特有的虛擬機)。各個應用在運行時的進程管理和內存管理都是相對獨立的。android使用一種“侵占性”的方式管理系統資源,這意味著為了釋放資源給高優先級的程序(通常情況下是正在與用戶進行直接交互的程序),某些進程及其宿主程序將會在沒有任何提示警告的情況下被無情的結束。

二、理解應用的優先級和進程狀態

結束一些進程是為了釋放回收資源,那麼那些進程會被結束?是A先結束還是B先結束呢?這決定於宿主應用程序的優先級了。一個應用的優先級等同於具有最高優先級的組件的優先級。如果此刻兩個程序具有相同的優先級,那麼曾經哪個進程處於低優先級的時間較長,就會被結束掉。進程的優先級受到進程間附屬關系的影響,比如A應用依賴的Service或者Content Provider是由B應用提供的,那麼B將會具有更高的優先級。所有的android應用都會遺留在內存中運行,直到系統需要釋放回收資源才會被結束掉。


圖示:各種進程及其對應的優先級

Activity Process 活動進程是其宿主程序更用戶直接交互的組件,android會嘗試通過回收各種資源來保證其運行狀態。此類進程數量少,通常是最後被結束掉的。

活動進程包含下面幾種:

Activity處於激活狀態,也就是說處於foreground,接收響應用戶事件;

ActivitIEs, Services, or Broadcast Receivers 正在執行處理OnReceive 事件;

Services 正在執行處理 onStart, onCreate, or onDestroy 事件.

Visible Process 可視化,但是不處於活動狀態的Activity。它們不處於foreground也不接受響應用戶事件。這中情況發生在Activity有部分被覆蓋了(比如我們點擊A裡面的一個按鈕,彈出一個Dialog,此時A就變成一個可視進程)。可視進程同樣很少,只有在極端的情況下,為了保證Activity Process的運行才會被結束掉。

Started Service Process 注意,是啟動後的服務進程。服務進程需要在沒有可視化界面的情況下持續運行,因為服務沒有和用戶直接交互。它們依然被認為是前台進程,只有當Visible和Activity Process需要資源的時候才會被結束。

Background Process 一個進程附屬在不可視的Activity 也沒有任何啟動的服務進程就變成了後台進程。通常情況下Android裡面會有一大堆後台進程,android用 last-seen-first-killed 這種方式來結束此類進程,從而為foreground進程提供資源。

Empty Process 為了改善整個系統的性能,Android會在內存中保留已經結束生命周期的應用程序。android保留這些緩存為了是應用能夠快速啟動。它們將會按照一貫的情況被結束掉。

綜上所述,正確的組織應用程序,確保穩定運行,防止運行中途被終止是非常重要的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved