android Application 類的使用

來源:互聯網
上載者:User

  Application的使用

  What is Application

  Application和Actovotu,Service一樣是android架構的一個系統組件,當android程式啟動時系統會建立一個 application對象,用來儲存系統的一些資訊。通常我們是不需要指定一個Application的,這時系統會自動幫我們建立,如果需要建立自己 的Application,也很簡單建立一個類繼承 Application並在manifest的application標籤中進行註冊(只需要給Application標籤增加個name屬性把自己的 Application的名字定入即可)。

  android系統會為每個程式運行時建立一個Application類的對象且僅建立一個,所以Application可以說是單例 (singleton)模式的一個類.且application對象的生命週期是整個程式中最長的,它的生命週期就等於這個程式的生命週期。因為它是全域 的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以通過Application來進行一些,資料傳遞,資料共用 等,資料緩衝等操作。

  Data passing between components using Application

  假如有一個Activity A, 跳轉到 Activity B ,並需要推薦一些資料,通常的作法是Intent.putExtra() 讓Intent攜帶,或者有一個Bundle把資訊加入Bundle讓Intent推薦Bundle對象,實現傳遞。但這樣作有一個問題在 於,Intent和Bundle所能攜帶的資料類型都是一些基本的資料類型,如果想實現複雜的資料傳遞就比較麻煩了,通常需要實現 Serializable或者Parcellable介面。這其實是Android的一種IPC資料傳遞的方法。如果我們的兩個Activity在同一個
進程當中為什麼還要這麼麻煩呢,只要把需要傳遞的對象的引用傳遞過去就可以了。

  基本思路是這樣的。在Application中建立一個HashMap ,以字串為索引,Object為value這樣我們的HashMap就可以儲存任何類型的對象了。在Activity A中把需要傳遞的對象放入這個HashMap,然後通過Intent或者其它途經再把這人索引的字串傳遞給Activity B ,Activity B 就可以根據這個字串在HashMap中取出這個對象了。只要再向下轉個型 ,就實現了對象的傳遞。

  Data caching in Application

  我一般會習慣在application中建立兩個HashMap一個用於資料的傳遞,一個用於緩 存一些資料。比如有一個Activity需要從網站擷取一些資料,擷取完之後我們就可以把這個資料cache到Application 當中,當版面設定到其它Activity再回來的時候,就可以直接使用緩衝好的資料了

 

 

 

android編程中,application這樣的名詞似乎變得那樣的不常見,而讓大家更為熟悉的是activity、intent、provider、broadcast和service。但其實android中的application也有著它自身的用處。

  開啟manifest檔案,會看到有一個application配置標籤,這就是有關application的使用了。那究竟application有什麼用處呢?來看看SDK中是如何描述的:

  Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's < application> tag, which will cause that class to be instantiated for you when the process
for your application/package is created.

  就是說application是用來儲存全域變數的,並且是在package建立的時候就跟著存在了。所以當我們需要建立全域變數的時候,不需要再像 j2se那樣需要建立public許可權的static變數,而直接在application中去實現。只需要調用Context的 getApplicationContext或者Activity的getApplication方法來獲得一個application對象,再做出相應的處理。

  因小工程中涉及到的檔案比較多,這裡就貼代碼撒。

  application檔案:

  Java代碼:

 public class TestApplication extends Application {

  private int curIndex;

  public int getCurIndex() {

  return curIndex;

  }

  public void setCurIndex(int curIndex) {

  this.curIndex = curIndex;

  }

  @Override

  public void onCreate() {

  super.onCreate();

  }

  @Override

  public void onTerminate() {

  super.onTerminate();

  }

  }

  application中有一個curIndex和setter getter方法。

  第一個acitivty中對application進行的操作:

  Java代碼:  

  TestApplication application = (TestApplication) this.getApplication();

  Log.i("data", ""+application.getCurIndex());

  application.setCurIndex(5);

  第二個Activity:

  Java代碼:

  TestApplication application = (TestApplication)this.getApplication();

  Log.i("data", ""+application.getCurIndex());

  application.setCurIndex(6);

  第三個Activity:

  Java代碼

  final TestApplication application = (TestApplication) this.getApplication();

  Log.i("data", ""+application.getCurIndex());

  在運行過程中,每一次都kill掉對應的Activity,再進入下一個Activity。啟動並執行結果如下:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.