国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程中context及全局變量實例詳解

2020-04-11 11:11:21
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程中context及全局變量的用法。分享給大家供大家參考,具體如下:

今天在研究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的子類:

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>

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

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

public class DemoActivity extends Activity { public Button button; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  button=(Button)findViewById(R.id.button);  ((GameApplication)getApplication()).setScore(100);  button.setOnClickListener(new View.OnClickListener() {   public void onClick(View v) {    Intent intent=new Intent();    intent.setClass(DemoActivity.this, ResultActivity.class);    startActivity(intent);   }  }); }}

在這個activity里面設置了分數,我們可以在別的activity里面取出來:

public class ResultActivity extends Activity {  @Override protected void onCreate(Bundle savedInstanceState) {  // TODO Auto-generated method stub  super.onCreate(savedInstanceState);  setContentView(R.layout.other);  TextView tv=(TextView)findViewById(R.id.tv);  int score=((GameApplication)getApplicationContext()).getScore();  tv.setText("你的成績是:"+score); }}

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

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁海县| 休宁县| 大田县| 英山县| 永新县| 武乡县| 定日县| 梁平县| 嘉黎县| 宁强县| 讷河市| 苗栗县| 乌鲁木齐县| 咸丰县| 庆安县| 抚宁县| 塔城市| 临湘市| 兴国县| 中超| 连城县| 喀什市| 邵阳市| 南江县| 浦东新区| 广南县| 玛多县| 义乌市| 宁海县| 伊金霍洛旗| 澎湖县| 延庆县| 德格县| 宁波市| 大埔区| 屏东县| 怀来县| 延安市| 孟村| 思茅市| 夏邑县|