[日期:2011-12-05] | 來源:Linux社區(qū) 作者:aomandeshangxiao |
今天在研究context的時(shí)候,對(duì)application和activity context有了一定的了解,下面是從網(wǎng)上復(fù)制過來的資料,
Application context和Activity context的區(qū)別:
這是兩種不同的context,也是最常見的兩種。第一種中context的生命周期與Application的生命周期相關(guān)的,context隨著Application的銷毀而銷毀,伴隨application的一生,與activity的生命周期無關(guān)。第二種中的context跟Activity的生命周期是相關(guān)的,但是對(duì)一個(gè)Application來說,Activity可以銷毀幾次,那么屬于Activity的context就會(huì)銷毀多次。至于用哪種context,得看應(yīng)用場(chǎng)景,個(gè)人感覺用Activity的context好一點(diǎn),不過也有的時(shí)候必須使用Application的context。application context可以通過Context.getApplicationContext或者Activity.getApplication方法獲取。
還有就是,在使用context的時(shí)候,小心內(nèi)存泄露,防止內(nèi)存泄露,注意一下幾個(gè)方面:
1. 不要讓生命周期長(zhǎng)的對(duì)象引用activity context,即保證引用activity的對(duì)象要與activity本身生命周期是一樣的
2. 對(duì)于生命周期長(zhǎng)的對(duì)象,可以使用application context
3. 避免非靜態(tài)的內(nèi)部類,盡量使用靜態(tài)類,避免生命周期問題,注意內(nèi)部類對(duì)外部對(duì)象引用導(dǎo)致的生命周期變化
現(xiàn)在回到正題,說一下Android全局變量,在平時(shí)的開發(fā)過程中,有時(shí)候可能會(huì)需要一些全局?jǐn)?shù)據(jù),來讓應(yīng)用中的所有Activity和View都能訪問到,大家在遇到這種情況時(shí),可能首先會(huì)想到自己定義一個(gè)類,然后創(chuàng)建很多靜態(tài)成員,android已經(jīng)為我們提供了這種情況的解決方案:
在Android中,有一個(gè)Application類,在Activity中可以使用getApplication()方法獲得實(shí)例,使用它就可以獲得當(dāng)前應(yīng)用的主題、資源文件中的內(nèi)容等,這個(gè)類更靈活的一個(gè)特性就是可以被繼承,來添加自己的全局屬性。例如開發(fā)一個(gè)游戲,需要保存分?jǐn)?shù),那么我們就可以繼承Application,下面是個(gè)demo。
首先,先寫個(gè)Application的子類:
- import Android.app.Application;
- public class GameApplication extends Application {
- private int score;
- public int getScore() {
- return score;
- }
- public void setScore(int score) {
- this.score = score;
- }
- }
然后在manifest.xml文件里面修改:
- <application Android:name=".GameApplication" android:icon="@drawable/icon" android:label="@string/app_name">
- <activity Android:name=".DemoActivity"
- Android:label="@string/app_name">
- <intent-filter>
- <action Android:name="android.intent.action.MAIN" />
- <category Android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity Android:name="ResultActivity"></activity>
- </application>