Application類html
每次應用程序運行時,應用程序的Application類都保持實例化狀態(都會持有該Application實例)。與Activity不一樣的是,配置改變並不會致使應用程序重啓。在應用程序內部,經過擴展Application類,能夠完成如下三項工做:java
1. 對Android運行時(接收到)廣播的應用程序級別事件(如低內存事件廣播)做出相應;android
2. 在應用程序組件之間傳遞對象(應用程序內部的多個Activity之間,或其餘組件之間);緩存
3. 管理和維護多個應用程序組件使用的資源;app
當在Manifest中註冊了Application實現之後,它會在建立應用個程序進程的時候獲得實例化。Application的實如今本質上是單態的,而且應該做爲單態進行實現,以便提供對其方法和成員變量的訪問。ide
如何使用Application?如何自定義Applicaton類?this
自定義的Application類須要使用單例模式被建立,並在Manifest文件中指定該自定義的類。spa
在Manifest文件中指定該自定義Application類:設計
<application android:name=".DemoApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:configChanges="orientation|screenSize|keyboard" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
此時,應用程序在啓動時,Application的實現將會被實例化。htm
在使用時,建立Application實例,部分代碼以下:
public class DemoApplication extends Application { private static final String TAG = DemoApplication.class.getSimpleName(); // DemoApplication使用單例模式使用 private static volatile DemoApplication singletonInstance; public static DemoApplication getInstance() { return singletonInstance; } @Override public void onCreate() { super.onCreate(); LogUtil.d(TAG, "onCreate running..."); singletonInstance = this; }
建立新的狀態變量和全局變量,以便從應用個程序組件中進行訪問:
/** * <功能描述> 獲取全局的狀態變量 * * @return void [返回類型說明] */ private void getGlobalStateValue() { } /** * <功能描述> 設置全局的狀態變量 * * @return void [返回類型說明] */ private void setGlobalStateValue() { }
以上方法用於維護應用程序狀態或實現共享資源,可是一種鬆散耦合的設計。
Application類中的其餘方法有什麼做用?
Application類爲應用程序的建立和終止、低可用內存和配置改變提供了事件處理程序。經過覆寫方法實現,應用程序行爲。
@Override public void onCreate() { // 建立應用程序時調用,用於實例化應用程序單例,建立和實例化應用程序狀態變量或共享資源 super.onCreate(); LogUtil.d(TAG, "onCreate running..."); singletonInstance = this; } @Override public void onConfigurationChanged(Configuration newConfig) { // 配置改變時,應用程序不會被終止和重啓,而是回調方法 super.onConfigurationChanged(newConfig); LogUtil.d(TAG, "onConfigurationChanged running..."); } @Override public void onLowMemory() { // 可用於清空緩存或者釋放沒必要要的資源 super.onLowMemory(); } @Override public void onTrimMemory(int level) { // API 13被引入,Android系統認爲須要減小應用程序內存開銷時調用 super.onTrimMemory(level); }
應用程序在啓動時,會默認啓動一個Activity,但這個Activity必須符合必定的規範:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
該Activity被應用程序啓動器使用,必須包含一個監聽MAIN動做和LAUNCHER分類的intent-filter。