天天看點

Android——application全局類的使用

目錄

​​1.概述​​

​​2.Application基類​​

​​3.自定義Application類​​

​​4.Application的生命周期​​

​​5.Application對象的回調函數​​

​​6.Application對象的作用​​

​​7.靜态單列共享資料和Application對象共享資料的對比​​

1.概述

通過學習Android提供的Application類,了解相關用法,對Application類進行擴充,主要用于維護應用中的全局狀态(整個應用中的全局變量),比如qq中昵稱在qq整個應用各處都可擷取并使用。

2.Application基類

Application和Activity,Service一樣是Android架構的一個系統元件,當Android程式啟動時系統會建立一個Application對象,是維護應用全局狀态的基類,用來存儲系統的一些資訊。Android系統自動(預設的,不管你有沒有定義)會為每個程式運作時建立一個Application類的對象且隻建立一個,是以Application可以說是單例(singleton)模式的一個類。如下清單檔案mainiftest中的application就是整個基類。

<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屬性

Android——application全局類的使用

當程式運作時,我們通過檢視建立的Application對象,得知是我們自己定義的MyApplication類

Android——application全局類的使用

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對象的作用

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;
    }
}