目錄
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屬性
當程式運作時,我們通過檢視建立的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對象的作用
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;
}
}