Android中Application類的詳細解釋:,androidapplication

來源:互聯網
上載者:User

Android中Application類的詳細解釋:,androidapplication

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或者捕獲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()裡及時停掉。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.