一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Android中context及全局變量小析

 487qq 2012-05-31

Android中context及全局變量小析



[日期: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的子類:

  1. import Android.app.Application;  
  2. public class GameApplication extends Application {  
  3.     private int score;  
  4.     public int getScore() {  
  5.         return score;  
  6.     }  
  7.     public void setScore(int score) {  
  8.         this.score = score;  
  9.     }  
  10. }  

然后在manifest.xml文件里面修改:

  1. <application Android:name=".GameApplication" android:icon="@drawable/icon" android:label="@string/app_name">  
  2.         <activity Android:name=".DemoActivity"  
  3.                   Android:label="@string/app_name">  
  4.             <intent-filter>  
  5.                 <action Android:name="android.intent.action.MAIN" />  
  6.                 <category Android:name="android.intent.category.LAUNCHER" />  
  7.             </intent-filter>  
  8.         </activity>  
  9.         <activity Android:name="ResultActivity"></activity>  
  10.     </application> 



注意到添加了Android:name=".GameApplication" 。

修改完了以后,再往下看:

  1. public class DemoActivity extends Activity {  
  2.     public Button button;  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);       
  7.         button=(Button)findViewById(R.id.button);  
  8.         ((GameApplication)getApplication()).setScore(100);  
  9.         button.setOnClickListener(new View.OnClickListener() {            
  10.             public void onClick(View v) {  
  11.                 Intent intent=new Intent();  
  12.                 intent.setClass(DemoActivity.this, ResultActivity.class);  
  13.                 startActivity(intent);  
  14.             }  
  15.         });  
  16.     }  
  17. }  

在這個(gè)activity里面設(shè)置了分?jǐn)?shù),我們可以在別的activity里面取出來:

  1. public class ResultActivity extends Activity {  
  2.        @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         // TODO Auto-generated method stub   
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.other);  
  7.         TextView tv=(TextView)findViewById(R.id.tv);  
  8.         int score=((GameApplication)getApplicationContext()).getScore();  
  9.         tv.setText("你的成績(jī)是:"+score);  
  10.     }  
  11. }  

這只是個(gè)簡(jiǎn)單的例子,當(dāng)然,想要完成以上功能,使用intent傳值就可以了,這樣還顯得麻煩,但是,如果有很多activity,使用這種方法就會(huì)發(fā)現(xiàn)很有用,是不是使用sharepreference也可以完成類似功能呢,可以,但是,效率方面就要比這個(gè)差很多了,sharepreference主要是用來存儲(chǔ)數(shù)據(jù),你可以退出程序時(shí)把所需要保存的簡(jiǎn)單數(shù)據(jù)保存到sharepreference里面,當(dāng)然復(fù)雜的數(shù)據(jù),還得使用sqllite。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    九九热视频免费在线视频| 黑人粗大一区二区三区| 亚洲男人天堂成人在线视频| 国产又粗又硬又长又爽的剧情| 亚洲欧美中文字幕精品| 国产韩国日本精品视频| 夜色福利久久精品福利| 黄男女激情一区二区三区| 欧美精品久久一二三区| 国产极品粉嫩尤物一区二区 | 一区二区三区在线不卡免费| 国产欧美日产久久婷婷| 欧洲一区二区三区蜜桃| 国产欧美日韩一级小黄片| 国产欧美日本在线播放| 国产亚洲精品香蕉视频播放| 日本高清一区免费不卡| 少妇在线一区二区三区| 大香伊蕉欧美一区二区三区| 国产三级黄片在线免费看| 91人妻久久精品一区二区三区| 日本精品免费在线观看| 日韩精品一区二区三区四区| 熟女少妇久久一区二区三区| 少妇被粗大进猛进出处故事| 中文久久乱码一区二区| 日韩欧美在线看一卡一卡| 一区二区日韩欧美精品| 国产成人精品一区在线观看| 色丁香一区二区黑人巨大| 国产一二三区不卡视频| 国产精品自拍杆香蕉视频| 中文字幕欧美视频二区| 人妻巨大乳一二三区麻豆| 日韩国产亚洲欧美激情| 精品少妇人妻av一区二区蜜桃| 国产免费无遮挡精品视频| 99热中文字幕在线精品| 黄片在线观看一区二区三区| 亚洲天堂一区在线播放| 情一色一区二区三区四|