Activity之間的數據共享問題起初一看並沒有那麼糾結,原因在於兩點,一來兩個Activity之間可以通過回傳的方式進行數據的共享,而哪怕是多個Activity之間,也可以通過靜態類進行數據的共享。今天Leo8573只是介紹一種避免使用靜態類的方法,而這種方法也是不求詳解,只是記錄,以解燃眉之急。
首先,在項目中創建一個新類,繼承Applcation。這個類就是我們的數據類,可以理解爲平時我們說用的Modle類,換句話說,這個類可以存放一些數據字段,並寫上Get和Set方法。
比如在以下代碼中,創建一個叫做DataApp的類,繼承Applcation,並在DataApp類中寫入我們想要共享的數據字段,配以Get和Set方法。
代碼示例:
public class DataApp extends Application {
private String userName;
private String passWord;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
其次,在項目的AndroidManifest.xml文件中的<application>標籤中,加入android:name =".DataApp"屬性。
代碼示例:
<application
android:name =".DataApp"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.leo8573.test.LoginActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
最後就是使用了,在我們想要使用的Activity調用getApplication()方法就可以得到DataApp的對象,然後將要存的字段值通過Set方法存入DataApp中,然後在其它Activity中同樣使用getApplication()方法得到DataApp的對象,然後再用Get方法得到剛在其它Activity中存入的數據字段,這樣就達到了共享的目的。
代碼示例:
//一個Activity中
DataApp dataApp = (DataApp) getApplication();
dataApp.setUserName("Leo8573");
//另一個Activity中
DataApp dataApp = (DataApp) getApplication();
String userName = dataApp.getUserName();
但值得注意的是,用完的數據字段一定要記得回收,即將字段設爲null,否則數據將一直存在於DataApp中。
代碼示例:
//在一個Activity中,數據用完
DataApp dataApp = (DataApp) getApplication();
dataApp.setUserName(null);
以上就是這種利用Aplication進行Activity之間的數據共享和傳輸的方法。至於爲什麼這樣做,Leo8573理解是與Application的生命週期有關,一個應用程序在運行期間只會有一個Application對象,這樣就可以利用它的這一特點進行數據的共享了。