【Android進階】在開發中Application到底用來做什么


首先,在一個Android程序中,有且只有一個Application對象,在程序開始跑起來的時候,首先執行Application的onCreate方法,這是一個Android應用的入口,在開發中,我們常常自定義一個MyApplication用來執行某些操作。由於在一個程序中,有且只有一個Application對象,所以我們可以使用單例設計模式,(這句話是錯誤的!因為單例模式需要把構造函數私有,但是Application的構造函數是不能私有的,所以不能使用單例模式,其實也沒有必要這樣做)下面簡單的介紹一下自定義Application的使用。


/**
 * 自定義Application對象
 * @Package 	com.example.myallutils
 *  
 * TODO
 * @author 		ZhaoKaiQiang
 *
 * @time   		2014年5月6日
 */
public class MyApplication extends Application {
	
	//這是Android程序的入口
	@Override
	public void onCreate() {
		super.onCreate();
	}
	
}

自定義完Application對象就可以了嗎?當然不是,還需要在AndroidManifest.xml中進行配置

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:name="com.example.myallutils.MyApplication"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Light.NoTitleBar" >
        <activity android:name="com.example.myallutils.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

這樣就可以使用我們自己的Application了。

那么自定義了MyApplication到底有什么用呢?

目前我接觸到的使用到Application的工作場景主要有兩個。

1.數據共享

在Activity中我們可以使用getApplication獲取到我們的Application對象,這樣我們就可以使用Application對象在不同的Activity之間進行數據的傳輸。

比如在軟件剛登陸的時候,我需要獲取之前用戶登錄的賬號信息,這些信息保存在了sharedpreferences中,那么我們就可以在MyApplication的onCreate方法中對這些數據進行初始化,保存在一個變量中,這樣當我們在其他的頁面需要用到這些用戶信息的時候,我們就可以直接從MyApplication中獲取這些信息。

2.關閉所有的Activity

徹底的關閉應用程序,網上有人提供了不少的思路,比如殺死當前進程等等,而使用Application對Activity進行管理也是一個不錯的辦法。

比如下面的代碼可以寫在我們的MyApplication中


//存放Activity對象
	private List<Activity> activityList = new LinkedList<Activity>();

	// 添加Activity到容器中
	public void addActivity(Activity activity) {
		activityList.add(activity);
	}

	// 遍歷所有Activity並finish
	public void exit() {
		for (Activity activity : activityList) {
			activity.finish();
		}
	}

當我們新進入一個Activity的時候,在Activity的onCreate方法中調用addActivity(this);然后在程序的出口的地方,調用exit()方法,就可以關閉所有的Activity。

但是我對這個方案的時候一直有一個疑惑,就是如果我們創建的所有的Activity都在一個進程中的話,那么只要我們控制好流程,保證每個頁面在關閉的時候都調用finish(),應該不會有Activity存活才對,也就不用費盡心思想着怎么徹底的推出程序,但是如果新打開的Activity是在新的棧里面(設置啟動的模式),這樣或許就有必要這樣做了,所以如果有人可以幫我解答這個疑問,不勝感激!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM