編輯:關於Android編程
Android Application類詳解:
Android中Application類的詳細解釋:
我們在平時的開發中,有時候可能會需要一些全局數據,來讓應用中的所有Activity和View都能訪問到,大家在遇到這種情況時,可能首先會想到自己定義一個類,然後創建很多靜態成員。
但是這種方法不符合Android的框架架構,不過andorid已經為我們提供了這種情況的解決方案:在Android中,有一個名為Application的類,我們可以在Activity中使用getApplication(),方法來獲得,它是代表我們的應用程序的類,使用它可以獲得當前應用的主題,資源文件中的內容等,這個類更靈活的一個特性就是可以被我們繼承,來添加我們自己的全局屬性。讓整個App的Activity和View都能訪問到。
1.概念:
android系統會為每個程序運行時創建一個Application類的對象且僅創建一個,所以Application可以說是單例 (singleton)模式的一個類.且application對象的生命周期是整個程序中最長的,它的生命周期就等於這個程序的生命周期。因為它是全局的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,數據傳遞,數據共享,數據緩存等操作。
2.作用:
(1).Application是一個基類,這個基類的作用是獲取整個App的狀態,我們需要自己定義一個類來繼承這個基類。
(2).定義一些全局的和一些上下文都要用到的變量和方法。
3.優點:
(1).繼承的方式:
生命周期隨著應用程序的銷毀而銷毀。
(2).靜態類或靜態方法:
程序退出後該類或者變量不能立刻被GC回收。
當你再次進入後會發現該靜態類保存的信息狀態是之前的。有可能會導致程序不是你想要的初始化狀態。
(3).App的進程被創建時,這個類就會被實例化,onCreate()方法就會被執行,給所有全局變量賦初期值。這樣,所有的Activity就共同擁有這個類裡面的變量了。
4.getContext()、getApplication()、getApplicationContext()、getActivity()的區別:
(1).getContext():獲取到當前對象的上下文。
(2).getApplication():獲得Application的對象
(3).getApplicationContext():獲得應用程序的上下文。有且僅有一個相同的對象。生命周期隨著應用程序的摧毀而銷毀。就像是社會,所有的都發生在這個社會上,僅且只有一個社會。每個Activity都有自己的上下文,而整個應用只有一個上下文
(4)getActivity():獲得Fragment依附的Activity對象。Fragment裡邊的getActivity()不推薦使用原因如下:這個方法會返回當前Fragment所附加的Activity,當Fragment生命周期結束並銷毀時,getActivity()返回的是null,所以在使用時要注意判斷null或者捕獲空指針異常。所以只要判斷getActivity()為空,就可以不再執行下面的代碼,這完全不影響業務的使用。
5.應用程序創建Context實例的情況有如下幾種情況:
(1).創建Application對象時,而且整個App共一個Application對象
(2).創建Service對象時
(3).創建Activity對象時。
Activity Service Application都是Context的子類。Context是一個抽象類,具體的實現是在ContextImpl類中。因此應用程序App共有的Context數目公式為:
總Context實例個數=Service個數+Activity個數+1(Application對應的Context實例)
6.Android應用中內存洩漏問題:
(1).對Context持有一個過長的引用。對Context的引用超過它本身的生命周期。Android應用程序限制使用的堆內存是16M
(2).靜態變量擁有了更多的對象引用,內存仍然不會被銷毀。
總結一下:避免Context洩漏應該注意的問題:
1.使用Application這種Context類型
2.注意對Context的引用不要超過它本身的生命周期
3.謹慎使用static關鍵字
4.Context裡如果有線程,一定要在onDestory()裡及時停掉。
感謝閱讀,希望能幫助到大家謝謝大家對本站的支持!
前言很長一段時間沒寫博客了,再不寫點東西真說不過去,把工作上的一些有價值的東西整理出來分享,在當下還有點時效性,不然遲早會爛在肚子裡的。還記得之前小巫有個開源計劃是想實現
AIDL是Android Interface Definition Language, 顧名思義,它主要就是用來定義接口的一種語言。Android提供AIDL主要用來進程
效果圖: 有時候我們需要去做一個Activity啟動時的數據加載對話框,關於對話框的各種實現可以通過一起學android之對話框 Dial
本文為原創博客,出自http://blog.csdn.net/minimicall 到今天為止,搜芽的賣家版本應該來說已經基本完成,攻堅克難的一路過來。速度也控制的比較好