Android學習筆記(三)Application類簡介


  每次運行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     @Override
14     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             @Override
14             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     @Override
14     public final void onLowMemory() {
15         super.onLowMemory();
16     }
17     
18     @Override
19     public void onTrimMemory(int level) {
20         //此方法在Android 4.0(API level 13)中引入,使用時請注意。
21         super.onTrimMemory(level);
22     }
23     
24     @Override
25     public void onConfigurationChanged(Configuration newConfig) {
26         super.onConfigurationChanged(newConfig);
27     }
28 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM