Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Application類的詳細介紹

Android Application類的詳細介紹

編輯:關於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()裡及時停掉。

感謝閱讀,希望能幫助到大家謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved