轉自:http://www.cnmsdn.com/html/201109/1316080337ID10097.html
Application的使用
What is Application
Application和Actovotu,Service一樣是android架構的一個系統元件,當android程式
啟動時系統會建立一個 application對象,用來存儲系統的一些資訊。通常我們是不需要指定
一個Application的,這時系統會自動幫我們建立,如果需要建立自己 的Application,也很
簡單建立一個類繼承 Application并在manifest的application标簽中進行注冊(隻需要給Application
标簽增加個name屬性把自己的 Application的名字定入即可)。
android系統會為每個程式運作時建立一個Application類的對象且僅建立一個,是以Application
可以說是單例 (singleton)模式的一個類.且application對象的生命周期是整個程式中最長的,它的生命
周期就等于這個程式的生命周期。因為它是全局 的單例的,是以在不同的Activity,Service中獲得的對象
都是同一個對象。是以通過Application來進行一些,資料傳遞,資料共享 等,資料緩存等操作。
Data passing between components using Application
假如有一個Activity A, 跳轉到 Activity B ,并需要推薦一些資料,通常的作法是Intent.putExtra()
讓Intent攜帶,或者有一個Bundle把資訊加入Bundle讓Intent推薦Bundle對象,實作傳遞。但這樣作
有一個問題在 于,Intent和Bundle所能攜帶的資料類型都是一些基本的資料類型,如果想實作複雜的
資料傳遞就比較麻煩了,通常需要實作 Serializable或者Parcellable接口。這其實是Android的一種
IPC資料傳遞的方法。如果我們的兩個Activity在同一個 程序當中為什麼還要這麼麻煩呢,隻要把需要
傳遞的對象的引用傳遞過去就可以了。
基本思路是這樣的。在Application中建立一個HashMap ,以字元串為索引,Object為value這樣
我們的HashMap就可以存儲任何類型的對象了。在Activity A中把需要傳遞的對象放入這個HashMap,
然後通過Intent或者其它途經再把這人索引的字元串傳遞給Activity B ,Activity B 就可以根據這個字元串
在HashMap中取出這個對象了。隻要再向下轉個型 ,就實作了對象的傳遞。
Data caching in Application
我一般會習慣在application中建立兩個HashMap一個用于資料的傳遞,一個用于緩 存一些資料。
比如有一個Activity需要從網站擷取一些資料,擷取完之後我們就可以把這個資料cache到Application 當中,
當頁面設定到其它Activity再回來的時候,就可以直接使用緩存好的資料了。但如果需要cache一些大量的
資料,最好是cache一些SoftReference ,并把這些資料cache到本地rom上或者sd卡上。如果在
application中的緩存不存在,從本地緩存查找,如果本地緩存的資料也不存在再從網 絡上擷取。