Android進階編程筆記(三)Application類簡介

來源:互聯網
上載者:User

標籤:

  每次運行APP時,Application類都保持執行個體化狀態。與Activity不同,配置改變不會導致應用程式重啟。通過繼承Application類,可以完成一下3項工作:

  · 對Android運行時廣播的應用程式級事件做出相應。

  · 在應用程式組件之間傳遞對象。

  · 管理和維護多個應用程式組件使用的資源。

  其中,後兩項工作通過使用一個單態類能夠更好地完成。Application的實現在本質上是單態的,並應作為單態實現,以便提供對其方法和成員變數的訪問。

一、擴充和使用Application類

  如下程式是擴充了Application類的架構代碼,並把它實現為一個單態。

 1 public class MyApplication extends Application { 2     private static MyApplication singleton; 3      4     public static MyApplication getInstance(){ 5         return singleton; 6     } 7      8     @Override 9     public final void onCreate() {10         super.onCreate();11         singleton = this;12     }13 }

  需要注意的是,在建立新的Application類後,需要在Manifest的application節點中註冊它,如下所示:

 1 <application 2         android:allowBackup="true" 3         android:name=".MyApplication" 4         android:icon="@drawable/ic_launcher" 5         android:label="@string/app_name" 6         android:theme="@style/AppTheme" > 7         <activity 8             android:name=".MainActivity" 9             android:label="@string/app_name" >10             <intent-filter>11                 <action android:name="android.intent.action.MAIN" />12 13                 <category android:name="android.intent.category.LAUNCHER" />14             </intent-filter>15         </activity>16 </application>

   當應用程式開始運行時,Application實現將會得到執行個體化。建立新的狀態變數和全域資源,在程式中我們可以通過以下方式使用它:

1   MyApplication myApp = MyApplication.getInstance();//擷取Application類執行個體化對象2   myApp.setTest("測試資料");//更改狀態變數3   String test = myApp.getTest();//擷取狀態變數

  我們知道,在Activity傳遞變數的方式有很多種,(如:Intent傳參),但就像有些常用的狀態變數(如:使用者的userId),如果每次得通過Intent方式傳來傳去的話,很容易導致邏輯混亂,那麼這時候我們就可以將這個常用的公開變數儲存到Application類中,無論哪一個Activity需要用到它時,直接從Application類中擷取即可,非常方便。下面以一個簡單的例子來說明一下通過Application類達到共用變數的效果:

  樣本說明:建立兩個Activity,用其中的一個Activity改變Application中的變數,然後在另一個Activity中驗證此變數的改變。(例子很簡單,能說明問題即可)先看一下:

     

  1、首先建立MyApplication去繼承Application類

 1 public class MyApplication extends Application { 2     private static MyApplication singleton; 3     private String test; 4     public static MyApplication getInstance(){ 5         return singleton; 6     } 7     public String getTest() { 8         return test; 9     }10     public void setTest(String test) {11         this.test = test;12     }13     @Override14     public final void onCreate() {15         super.onCreate();16         singleton = this;17     }18 }

  以上代碼,在MyApplication類中,包含了一個MyApplication的執行個體變數和一個測試變數。

  2、在MainActivity中擷取MyApplication的執行個體化對象,並且改變MyApplication中test變數的值。

 1 public class MainActivity extends Activity { 2     private MyApplication myApp; 3     EditText etTest; 4     Button bnGo; 5     @Override 6     protected void onCreate(Bundle savedInstanceState) { 7         super.onCreate(savedInstanceState); 8         setContentView(R.layout.activity_main); 9         myApp = MyApplication.getInstance();//擷取Application類執行個體化對象10         etTest = (EditText)findViewById(R.id.et_test);//繫結控制項11         bnGo = (Button)findViewById(R.id.bn_go);//繫結控制項12         bnGo.setOnClickListener(new OnClickListener() {13             @Override14             public void onClick(View arg0) {15                 myApp.setTest(etTest.getText().toString());//改變MyApplication中test變數的值16                 Intent intent = new Intent(MainActivity.this, TestActivity.class);17                 startActivity(intent);18             }19         });20     }21 }

  3、在TestActivity取出MyApplication中的test值並顯示在TextView上。

 1 public class TestActivity extends Activity { 2     private String test; 3     @Override 4     protected void onCreate(Bundle savedInstanceState) { 5         super.onCreate(savedInstanceState); 6         setContentView(R.layout.activity_test); 7         TextView tvShow = (TextView)findViewById(R.id.tv_show); 8         test = MyApplication.getInstance().getTest(); 9         tvShow.setText(test);10     }11 }

二、重寫應用程式的生命週期事件

  Application類為應用程式的建立和終止,低可用記憶體和配置改變提供了事件處理常式。

  通過重寫一下方法,可以為上述幾種情況實現自己的應用程式行為:

  · onCreate 建立應用程式時調用。可通過重寫此方法來執行個體化應用程式的單態,以及建立和執行個體化任何應用程式的狀態變數和共用資源。

  · onLowMemory: 當系統處於資源匱乏狀態是,具有良好行為的應用程式可以釋放額外的記憶體。此方法一般只會在後台進程已經終止,但是前台應用程式仍然缺少記憶體是調用。可通過重寫此方法來清空緩衝或者釋放不必要的資源。

  · onTrimMemory:作為onLowMemory的一個特定於應用程式的替代選擇,在Android 4.0(API level 13)中引入。

  · onConfigurationChanged:在配置改變時,應用程式物件不會被終止和重啟。如果應用程式使用到的值需要在配置改變時重新載入,則可以通過重寫此方法實現。

  以下是重寫什麼周期事件的代碼(沒有實現具體功能):

 1 public class MyApplication extends Application { 2     private static MyApplication singleton; 3     public static MyApplication getInstance(){ 4         return singleton; 5     } 6      7     @Override 8     public final void onCreate() { 9         super.onCreate();10         singleton = this;11     }12     13     @Override14     public final void onLowMemory() {15         super.onLowMemory();16     }17     18     @Override19     public void onTrimMemory(int level) {20         //此方法在Android 4.0(API level 13)中引入,使用時請注意。21         super.onTrimMemory(level);22     }23     24     @Override25     public void onConfigurationChanged(Configuration newConfig) {26         super.onConfigurationChanged(newConfig);27     }28 }

Android進階編程筆記(三)Application類簡介

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.