精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Android中context及全局變量小析

Android中context及全局變量小析



[日期:2011-12-05]來源:Linux社區  作者:aomandeshangxiao

今天在研究context的時候,對application和activity context有了一定的了解,下面是從網上復制過來的資料,

Application context和Activity context的區別:

這是兩種不同的context,也是最常見的兩種。第一種中context的生命周期與Application的生命周期相關的,context隨著Application的銷毀而銷毀,伴隨application的一生,與activity的生命周期無關。第二種中的context跟Activity的生命周期是相關的,但是對一個Application來說,Activity可以銷毀幾次,那么屬于Activity的context就會銷毀多次。至于用哪種context,得看應用場景,個人感覺用Activity的context好一點,不過也有的時候必須使用Application的context。application context可以通過Context.getApplicationContext或者Activity.getApplication方法獲取。

還有就是,在使用context的時候,小心內存泄露,防止內存泄露,注意一下幾個方面:

1. 不要讓生命周期長的對象引用activity context,即保證引用activity的對象要與activity本身生命周期是一樣的

2. 對于生命周期長的對象,可以使用application context

3. 避免非靜態的內部類,盡量使用靜態類,避免生命周期問題,注意內部類對外部對象引用導致的生命周期變化

現在回到正題,說一下Android全局變量,在平時的開發過程中,有時候可能會需要一些全局數據,來讓應用中的所有Activity和View都能訪問到,大家在遇到這種情況時,可能首先會想到自己定義一個類,然后創建很多靜態成員,android已經為我們提供了這種情況的解決方案:

Android中,有一個Application類,在Activity中可以使用getApplication()方法獲得實例,使用它就可以獲得當前應用的主題、資源文件中的內容等,這個類更靈活的一個特性就是可以被繼承,來添加自己的全局屬性。例如開發一個游戲,需要保存分數,那么我們就可以繼承Application,下面是個demo。

首先,先寫個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. }  

在這個activity里面設置了分數,我們可以在別的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("你的成績是:"+score);  
  10.     }  
  11. }  

這只是個簡單的例子,當然,想要完成以上功能,使用intent傳值就可以了,這樣還顯得麻煩,但是,如果有很多activity,使用這種方法就會發現很有用,是不是使用sharepreference也可以完成類似功能呢,可以,但是,效率方面就要比這個差很多了,sharepreference主要是用來存儲數據,你可以退出程序時把所需要保存的簡單數據保存到sharepreference里面,當然復雜的數據,還得使用sqllite。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android 開發 — 開機自啟動--中國移動開發者社區
Android全局對象Application的使用,以及如何在任何地方得到Application全局對象
Android Context完全解析,你所不知道的Context的各種細節
Android中Application類用法
Android中退出多個Activity的兩個經典方法
一個帖子學會Android開發四大組件
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 定结县| 禹州市| 通许县| 齐齐哈尔市| 大名县| 松桃| 安仁县| 当雄县| 牡丹江市| 金川县| 教育| 永安市| 百色市| 平顶山市| 民丰县| 高淳县| 静宁县| 林甸县| 古交市| 兴仁县| 和田县| 济源市| 涟水县| 陇川县| 伊宁县| 康乐县| 安庆市| 泾川县| 改则县| 桐梓县| 厦门市| 黔西县| 西贡区| 峨眉山市| 南溪县| 海丰县| 龙江县| 清水河县| 开化县| 渝北区| 方城县|