What is Application
Application和Activity,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中的緩存不存在,從本地緩存查找,如果本地緩存的數據也不存在再從網 絡上獲取。
Android Application的作用