最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Application類的詳細(xì)介紹

 更新時(shí)間:2016年11月22日 14:17:27   投稿:lqh  
這篇文章主要介紹了Android Application類的詳細(xì)介紹的相關(guān)資料,這里對Android Application的概念、作用、優(yōu)點(diǎn)及其他注意事項(xiàng)進(jìn)行了一一介紹,需要的朋友可以參考下

Android Application類詳解:

Android中Application類的詳細(xì)解釋:

我們在平時(shí)的開發(fā)中,有時(shí)候可能會需要一些全局?jǐn)?shù)據(jù),來讓應(yīng)用中的所有Activity和View都能訪問到,大家在遇到這種情況時(shí),可能首先會想到自己定義一個(gè)類,然后創(chuàng)建很多靜態(tài)成員。
但是這種方法不符合Android的框架架構(gòu),不過andorid已經(jīng)為我們提供了這種情況的解決方案:在Android中,有一個(gè)名為Application的類,我們可以在Activity中使用getApplication(),方法來獲得,它是代表我們的應(yīng)用程序的類,使用它可以獲得當(dāng)前應(yīng)用的主題,資源文件中的內(nèi)容等,這個(gè)類更靈活的一個(gè)特性就是可以被我們繼承,來添加我們自己的全局屬性。讓整個(gè)App的Activity和View都能訪問到。

1.概念:

android系統(tǒng)會為每個(gè)程序運(yùn)行時(shí)創(chuàng)建一個(gè)Application類的對象且僅創(chuàng)建一個(gè),所以Application可以說是單例 (singleton)模式的一個(gè)類.且application對象的生命周期是整個(gè)程序中最長的,它的生命周期就等于這個(gè)程序的生命周期。因?yàn)樗侨值膯卫?,所以在不同的Activity,Service中獲得的對象都是同一個(gè)對象。所以通過Application來進(jìn)行一些,數(shù)據(jù)傳遞,數(shù)據(jù)共享,數(shù)據(jù)緩存等操作。

2.作用:

(1).Application是一個(gè)基類,這個(gè)基類的作用是獲取整個(gè)App的狀態(tài),我們需要自己定義一個(gè)類來繼承這個(gè)基類。
(2).定義一些全局的和一些上下文都要用到的變量和方法。

3.優(yōu)點(diǎn):

(1).繼承的方式:
生命周期隨著應(yīng)用程序的銷毀而銷毀。
(2).靜態(tài)類或靜態(tài)方法:
程序退出后該類或者變量不能立刻被GC回收。
當(dāng)你再次進(jìn)入后會發(fā)現(xiàn)該靜態(tài)類保存的信息狀態(tài)是之前的。有可能會導(dǎo)致程序不是你想要的初始化狀態(tài)。
(3).App的進(jìn)程被創(chuàng)建時(shí),這個(gè)類就會被實(shí)例化,onCreate()方法就會被執(zhí)行,給所有全局變量賦初期值。這樣,所有的Activity就共同擁有這個(gè)類里面的變量了。

4.getContext()、getApplication()、getApplicationContext()、getActivity()的區(qū)別:

(1).getContext():獲取到當(dāng)前對象的上下文。
(2).getApplication():獲得Application的對象
(3).getApplicationContext():獲得應(yīng)用程序的上下文。有且僅有一個(gè)相同的對象。生命周期隨著應(yīng)用程序的摧毀而銷毀。就像是社會,所有的都發(fā)生在這個(gè)社會上,僅且只有一個(gè)社會。每個(gè)Activity都有自己的上下文,而整個(gè)應(yīng)用只有一個(gè)上下文
(4)getActivity():獲得Fragment依附的Activity對象。Fragment里邊的getActivity()不推薦使用原因如下:這個(gè)方法會返回當(dāng)前Fragment所附加的Activity,當(dāng)Fragment生命周期結(jié)束并銷毀時(shí),getActivity()返回的是null,所以在使用時(shí)要注意判斷null或者捕獲空指針異常。所以只要判斷getActivity()為空,就可以不再執(zhí)行下面的代碼,這完全不影響業(yè)務(wù)的使用。

5.應(yīng)用程序創(chuàng)建Context實(shí)例的情況有如下幾種情況:

(1).創(chuàng)建Application對象時(shí),而且整個(gè)App共一個(gè)Application對象
(2).創(chuàng)建Service對象時(shí)
(3).創(chuàng)建Activity對象時(shí)。
Activity Service Application都是Context的子類。Context是一個(gè)抽象類,具體的實(shí)現(xiàn)是在ContextImpl類中。因此應(yīng)用程序App共有的Context數(shù)目公式為:
總Context實(shí)例個(gè)數(shù)=Service個(gè)數(shù)+Activity個(gè)數(shù)+1(Application對應(yīng)的Context實(shí)例)

6.Android應(yīng)用中內(nèi)存泄漏問題:

(1).對Context持有一個(gè)過長的引用。對Context的引用超過它本身的生命周期。Android應(yīng)用程序限制使用的堆內(nèi)存是16M
(2).靜態(tài)變量擁有了更多的對象引用,內(nèi)存仍然不會被銷毀。

總結(jié)一下:避免Context泄漏應(yīng)該注意的問題:

1.使用Application這種Context類型
2.注意對Context的引用不要超過它本身的生命周期
3.謹(jǐn)慎使用static關(guān)鍵字
4.Context里如果有線程,一定要在onDestory()里及時(shí)停掉。

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

相關(guān)文章

最新評論

武清区| 泰兴市| 团风县| 桓台县| 阿克| 韶关市| 丰原市| 道真| 宁波市| 盱眙县| 江永县| 舞钢市| 芦山县| 罗平县| 鄯善县| 宝清县| 忻州市| 遵化市| 八宿县| 德钦县| 巫山县| 福清市| 缙云县| 大石桥市| 洞头县| 佛学| 大竹县| 十堰市| 图木舒克市| 南陵县| 鄂温| 珠海市| 景谷| 湘潭市| 沙雅县| 九台市| 招远市| 乐昌市| 华容县| 汉中市| 阿克苏市|