国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android Application類的詳細介紹

2019-12-12 04:33:05
字體:
來源:轉載
供稿:網友

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()里及時停掉。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴山县| 图片| 宣汉县| 邹平县| 讷河市| 乡宁县| 嘉善县| 西畴县| 新野县| 大邑县| 罗田县| 武隆县| 淮南市| 宝鸡市| 枣阳市| 鹤岗市| 大连市| 湟中县| 寻甸| 微山县| 临城县| 隆回县| 扎兰屯市| 阳高县| 宣武区| 乌兰察布市| 运城市| 沈阳市| 蓬溪县| 孟津县| 唐山市| 弥渡县| 灌南县| 合川市| 江源县| 河南省| 剑阁县| 浠水县| 江源县| 武定县| 江西省|