Android中的Application類在應用程序中的應用

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。

相關文章
相關標籤/搜索