最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程中context及全局變量實(shí)例詳解

 更新時(shí)間:2015年12月14日 15:28:01   作者:傲慢的上校  
這篇文章主要介紹了Android編程中context及全局變量的用法,結(jié)合實(shí)例形式較為詳細(xì)的分析講述了context及全局變量的使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下

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

今天在研究context的時(shí)候,對(duì)application和activity context有了一定的了解,下面是從網(wǎng)上復(fù)制過(guò)來(lái)的資料

Application context和Activity context的區(qū)別:

這是兩種不同的context,也是最常見(jiàn)的兩種。第一種中context的生命周期與Application的生命周期相關(guān)的,context隨著Application的銷(xiāo)毀而銷(xiāo)毀,伴隨application的一生,與activity的生命周期無(wú)關(guān)。第二種中的context跟Activity的生命周期是相關(guān)的,但是對(duì)一個(gè)Application來(lái)說(shuō),Activity可以銷(xiāo)毀幾次,那么屬于Activity的context就會(huì)銷(xiāo)毀多次。至于用哪種context,得看應(yīng)用場(chǎng)景,個(gè)人感覺(jué)用Activity的context好一點(diǎn),不過(guò)也有的時(shí)候必須使用Application的context。application context可以通過(guò)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)部類(lèi),盡量使用靜態(tài)類(lèi),避免生命周期問(wèn)題,注意內(nèi)部類(lèi)對(duì)外部對(duì)象引用導(dǎo)致的生命周期變化

現(xiàn)在回到正題,說(shuō)一下android全局變量,在平時(shí)的開(kāi)發(fā)過(guò)程中,有時(shí)候可能會(huì)需要一些全局?jǐn)?shù)據(jù),來(lái)讓?xiě)?yīng)用中的所有Activity和View都能訪問(wèn)到,大家在遇到這種情況時(shí),可能首先會(huì)想到自己定義一個(gè)類(lèi),然后創(chuàng)建很多靜態(tài)成員,android已經(jīng)為我們提供了這種情況的解決方案:

在Android中,有一個(gè)Application類(lèi),在Activity中可以使用getApplication()方法獲得實(shí)例,使用它就可以獲得當(dāng)前應(yīng)用的主題、資源文件中的內(nèi)容等,這個(gè)類(lèi)更靈活的一個(gè)特性就是可以被繼承,來(lái)添加自己的全局屬性。例如開(kāi)發(fā)一個(gè)游戲,需要保存分?jǐn)?shù),那么我們就可以繼承Application,下面是個(gè)demo供大家參考

首先,先寫(xiě)個(gè)Application的子類(lèi):

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);
   }
  });
 }
}

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

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("你的成績(jī)是:"+score);
 }
}

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

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

册亨县| 汉源县| 满城县| 达州市| 奉新县| 綦江县| 大关县| 桂林市| 金堂县| 阿鲁科尔沁旗| 友谊县| 闽清县| 新沂市| 高阳县| 香港 | 尼木县| 西安市| 信宜市| 民县| 金沙县| 漳浦县| 延川县| 左权县| 乳山市| 扎鲁特旗| 闻喜县| 小金县| 彭山县| 元朗区| 顺义区| 萨嘎县| 上思县| 肇东市| 绵竹市| 大邑县| 呈贡县| 巴中市| 浮山县| 青州市| 湟源县| 大连市|