欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Android Application類詳解:

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

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

1.概念:

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

2.作用:

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

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

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

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

(1).getContext():獲取到當(dāng)前對(duì)象的上下文。
(2).getApplication():獲得Application的對(duì)象
(3).getApplicationContext():獲得應(yīng)用程序的上下文。有且僅有一個(gè)相同的對(duì)象。生命周期隨著應(yīng)用程序的摧毀而銷毀。就像是社會(huì),所有的都發(fā)生在這個(gè)社會(huì)上,僅且只有一個(gè)社會(huì)。每個(gè)Activity都有自己的上下文,而整個(gè)應(yīng)用只有一個(gè)上下文
(4)getActivity():獲得Fragment依附的Activity對(duì)象。Fragment里邊的getActivity()不推薦使用原因如下:這個(gè)方法會(huì)返回當(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對(duì)象時(shí),而且整個(gè)App共一個(gè)Application對(duì)象
(2).創(chuàng)建Service對(duì)象時(shí)
(3).創(chuàng)建Activity對(duì)象時(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對(duì)應(yīng)的Context實(shí)例)

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

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

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

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

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

相關(guān)文章

最新評(píng)論