Android的Activity共享變數的另一種做法

風的王子發表於2013-09-02

--------------------------------------------------------

注意:這種做法對於activity比較少,只有兩三個,並且context生命週期比較長,根本不怎麼起作用。解決不了OOM

-----------------------------------------------------------

感覺用這種方式儲存登入資訊比較好,比SharedPreferences儲存登入資訊的狀態比較合適。

相當於儲存session的資料(打個比喻)。

多個Activity中經常使用同一變數時,使用Bundle則比較麻煩,每次呼叫Activity都需要設定一次。如想在整個應用中使用,在java中一般是使用靜態變數,而在android中有個更優雅的方式是使用Application context。
用SharedPreferences儲存的話關閉應用的時候這個值還是最後一次設定的值,如果是非正常退出程式時登入狀態就會有問題,所以在使用上感覺application context是最合適儲存當前登入狀態的資訊,當然可是儲存一些相當於session當中儲存的值,因為關閉應用後這些值就沒有了。

package org.mdx.core.modules;

import android.app.Application;

public class ApplicationHelper extends Application {

 private boolean session_enter = false; // 預設為false

 /**
  * 設定session狀態
  *
  * @param bol
  *            true為以登入,false未登入
  */
 public void putSession(boolean bol) {
  session_enter = bol;
 }

 /**
  * 是否登入
  *
  * @return true是,false否
  */
 public boolean isEnter() {
  return session_enter;
 }

}

 

在AndroidManifest.xml的application加個name屬性就可以了,如下面所示:
<application android:name=".core.modules.ApplicationHelper"
android:icon="@drawable/icon" android:label="@string/app_name">


activity使用時:(這個是重點)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getApplicationContext().putSession(false); // 設定登入狀態為退出
}
public ApplicationHelper getApplicationContext() {
return ((ApplicationHelper) super.getApplicationContext());
}

相關文章