編輯:關於android開發
一、先看看文檔裡怎麼說
Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your
AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.
Application 類是用來維護應用程序全局狀態。你可以提供自己的實現,並在 AndroidManifest.xml文件的 <application> 標簽中指出他的名字,這將導致在創建應用程序時去實例化你自己的 Application 類。
Android系統會為每個程序運行時創建一個Application類的對象且僅創建一個,所以Application可以說是單例 (Singleton)模式的一個類。且 Application 對象的生命周期是整個程序中最長的,它的生命周期就等於這個程序的生命周期。因為它是全局唯一的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過 Application 來進行一些:數據傳遞、數據共享、數據緩存等操作。
二、重寫 Application 類的生命周期事件
public void onCreate()
在應用程序創建的時候被調用,可以實現這個這個方法來創建和實例化任何應用程序狀態變量或共享資源。還可以在這個方法裡面得到 Application 的單例。
public void onTerminate ()
當終止應用程序對象時調用,不保證一定被調用,當程序是被內核終止以便為其他應用程序釋放資源,那麼將不會提醒,並且不調用應用程序的對象的onTerminate方法而直接終止進程。
public void onLowMemory()
當系統資源匮乏的時候,我們可以在這裡可以釋放額外的內存, 這個方法一般只會在後台進程已經結束,但前台應用程序還是缺少內存時調用。可以重寫這個方法來清空緩存或者釋放不必要的資源。
public void onTrimMemory(int level)
當運行時決定當前應用程序應該減少其內存開銷時(通常在進入後台運行的時候)調用,包含一個 level 參數,用於提供請求的上下文。
public void onConfigurationChanged (Configuration newConfig)
與 Activity 不同,配置改變時,應用程序對象不會被終止和重啟。如果應用程序使用的值依賴於特定的配置,則重寫這個方法來加載這些值,或者在應用程序級處理配置值的改變。
三、通過 Application 傳遞數據
假如有一個Activity A, 跳轉到 Activity B ,並需要傳遞一些數據,通常的作法是 Intent.putExtra() 讓Intent攜帶,或者有一個Bundle把信息加入Bundle讓Intent傳遞Bundle對象,實現傳遞。但這樣 有一個問題在於,Intent 和 Bundle 所能攜帶的數據類型都是一些基本的數據類型,如果想實現復雜的數據傳遞就比較麻煩了,通常需要實現 Serializable 或者 Parcellable 接口。這其實是Android的一種IPC數據傳遞的方法。如果我們的兩個Activity在同一個進程當中為什麼還要這麼麻煩呢,只要把需要傳遞的對象的引用傳遞過去就可以了。
基本思路是:在 Application 中創建一個 HashMap ,以字符串為key,Object為value這樣我們的 HashMap 就可以存儲任何類型的對象了。在Activity A中把需要傳遞的對象放入這個HashMap,然後通過 Intent 或者其它途徑再把這 key 傳遞給Activity B ,Activity B 就可以根據這個字符串在 HashMap 中取出這個對象了。只要再向下轉型 ,就實現了對象的傳遞。、
四、Application 數據緩存
我一般會習慣在 Application 中建立兩個 HashMap 一個用於數據的傳遞(見三),一個用於緩存一些數據。比如有一個Activity需要從網站獲取一些數據,獲取完之後我們就可以把這個數據先存到Application 當中,當頁面跳轉到其它 Activity 再回來的時候,就可以直接使用緩存好的數據了。但如果需要cache一些大量的數據,最好是cache一些 (軟引用)SoftReference ,並把這些數據cache到本地Rom 上或者 SDCard上。如果在 Application 中的緩存不存在,從本地緩存查找,如果本地緩存的數據也不存在再從網絡上獲取。
裝模作樣的聲明一下:本博文章若非特殊注明皆為原創,若需轉載請保留原文鏈接(http://www.cnblogs.com/kest/p/5137328.html)及作者信息k_est
淺談 EventBus,淺談eventbus概述: EventBus是一款針對Android優化的發布/訂閱事件總線。 主要功能是替代Intent,Handler,Bro
Form and Control KeyEvent一、Form的KeyEvent KeyCode: private void Form1_KeyDown(object
上次簡單地介紹了AudioRecord和AudioTrack的使用,這次就結合SurfaceVie
硅谷商城5--購物車商品選中和商品總價計算,5--購物車 1_商品總價格計算 ①在GovaffairPager類中設置 adapter = new GovaffairP