編輯:Android開發實例
一、前言
與大多數傳統的操作系統環境不同,Android應用程序並不能控制自己的生命周期。所以應用的各個組件(activity,Service……)就得時刻小心的監聽應用的狀態變化對它們的影響,防止在不適當的時機被終止掉。(可能會造成數據丟失哦)
在Android中每個應用都具有獨立的進程運行在獨立的Dalvik(Android特有的虛擬機)。各個應用在運行時的進程管理和內存管理都是相對獨立的。Android使用一種“侵占性”的方式管理系統資源,這意味著為了釋放資源給高優先級的程序(通常情況下是正在與用戶進行直接交互的程序),某些進程及其宿主程序將會在沒有任何提示警告的情況下被無情的結束。
二、理解應用的優先級和進程狀態
結束一些進程是為了釋放回收資源,那麼那些進程會被結束?是A先結束還是B先結束呢?這決定於宿主應用程序的優先級了。一個應用的優先級等同於具有最高優先級的組件的優先級。如果此刻兩個程序具有相同的優先級,那麼曾經哪個進程處於低優先級的時間較長,就會被結束掉。進程的優先級受到進程間附屬關系的影響,比如A應用依賴的Service或者Content Provider是由B應用提供的,那麼B將會具有更高的優先級。所有的Android應用都會遺留在內存中運行,直到系統需要釋放回收資源才會被結束掉。
圖示:各種進程及其對應的優先級
Activity Process 活動進程是其宿主程序更用戶直接交互的組件,Android會嘗試通過回收各種資源來保證其運行狀態。此類進程數量少,通常是最後被結束掉的。
活動進程包含下面幾種:
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保留這些緩存為了是應用能夠快速啟動。它們將會按照一貫的情況被結束掉。
綜上所述,正確的組織應用程序,確保穩定運行,防止運行中途被終止是非常重要的。
轉自:http://www.cnblogs.com/halzhang/archive/2010/05/28/1746595.html
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個