Android——application全局類的使用

目錄html

 

1.概述android

2.Application基類緩存

3.自定義Application類app

4.Application的生命週期框架

5.Application對象的回調函數ide

6.Application對象的做用模塊化

7.靜態單列共享數據和Application對象共享數據的對比函數


1.概述

經過學習Android提供的Application類,瞭解相關用法,對Application類進行擴展,主要用於維護應用中的全局狀態(整個應用中的全局變量),好比qq中暱稱在qq整個應用各處均可獲取並使用。學習

2.Application基類

Application和Activity,Service同樣是Android框架的一個系統組件,當Android程序啓動時系統會建立一個Application對象,是維護應用全局狀態的基類,用來存儲系統的一些信息。Android系統自動(默認的,無論你有沒有定義)會爲每一個程序運行時建立一個Application類的對象且只建立一個,因此Application能夠說是單例(singleton)模式的一個類。以下清單文件mainiftest中的application就是整個基類。ui

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

3.自定義Application類

每一個應用進程默認啓動以後都會建立一個application對象,其餘的組件能夠經過全局上下文環境訪問這個對象,可是application是系統定義的,咱們沒法修改代碼。好在咱們能夠擴展application類,讓Android系統使用咱們自定義的Application類建立Application對象。

第一步:自定義類繼承Application基類

public class MyApplication extends Application {
}

第二步:mainiftest文件中添加name屬性

當程序運行時,咱們經過查看建立的Application對象,得知是咱們本身定義的MyApplication類

4.Application的生命週期

Application對象的生命週期是整個程序中最長的,它的生命週期就等於這個程序的生命週期。不通的activity互相切換,可是Application對象都是同一個。

5.Application對象的回調函數

Application對象是有Android系統管理,他的回調函數運行於ui線程,也就是主線程,運行過程當中主要的回掉方法

public class MyApplication extends Application {
    public static  final String TAG ="main-app";
    //初始回調方法
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: "+Thread.currentThread());
    }
    //系統配置發生變動的時候,好比語言發生變化,屏幕發生切換等,onConfigurationChanged會被調用,
    // newConfig是新的配置信息

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged: "+"newConfig"+newConfig);
    }

    //app內存低的時候回調
    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }
}

6.Application對象的做用

由於Application是全局的單例的,因此在不一樣的Activity,Service中得到的對象都是同一個對象。因此能夠經過Application來進行一些,如:數據傳遞、數據共享和數據緩存等操做。以下,我麼在自定義的Application類中定義一個變量,在響應的地方設置,也能夠在響應的地方獲取

public class MyApplication extends Application {
  

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    } 

}

7.靜態單列共享數據和Application對象共享數據的對比

咱們定義一個單列類

public class App {

    private static App singleton;

    private String test;

    public static App getInstance(){
        return singleton;
    }

    public String getTest() {
          return test;
    }

    public void setTest(String test) {
       this.test = test;
    }
}

這樣咱們在應用中也能夠經過這個單列類進行數據共享,那麼和Application相比較,靜態單列模塊化更好,Application至關於一個Context因此具備訪問資源的能力,可是單列也能夠經過接受Context參數進行訪問資源,Application的回調和和生命週期徹底由Android系統控制,咱們沒法干預,可是使用單列就更加靈活,推薦使用單列。

相關文章
相關標籤/搜索