Android設置全局變量的兩種方法


說到全局變量,可能在教科書里面都不建議我們使用,但是在實際開發過程中,會發現全局變量其實帶來了很大的便捷性。雖然Android在不同的Activity切換時可以把要傳遞的值傳到Intent里面(iOS中也有類似的方法),但是當我們應用的頁面很多,邏輯漸漸復雜了之后,全局變量就帶來了非常大的便利。

我個人總結了之后,把全局變量分成了兩大類:

  1. 程序生命周期之外的全局變量

    這種全局變量當程序被kill了之后,依舊可以保存下來,當程序下次啟動的時候,依然有效。最常見的就是用戶名、密碼之類的了。當然,如果你要保存的數據非常多,而且數據量比較大,就需要用輕量級的數據庫來保存了。

  2. 生命周期之內的全局變量

    顧名思義,當程序被kill之后,下次啟動了之后,這些變量就被重新初始化,這些變量只在此次生命周期之內有效。最常見的就是頁面之間要傳遞的參數了,這些參數並不需要在程序被強制結束之后依舊保存。

我們就分類來看吧!

生命周期之外的全局變量

一般來說,這類全局變量不會很多,如果很多的話,就要使用sqlite等數據庫了,所以,我的這些全局變量是放在你自己定義的一個公共方法類(我的命名為CommonUtil)里面的,這個類一般都是自定義的,不繼承自任何類。在這個類里面,我們定義下面的成對的方法來設置和獲取全局變量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* Description: 設置和獲取用戶名
*/
public static void setAccount(String account){
SharedPreferences sp = context.getSharedPreferences("YOUR APP'S NAME", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("ACCOUNT",""); // 先清空原始數據
editor.putString("ACCOUNT",account);
editor.commit();
}

public static String getAccount() {
SharedPreferences sp = context.getSharedPreferences("YOUR APP'S NAME", Activity.MODE_PRIVATE);
return sp.getString("ACCOUNT", "");
}

注:

  1. 必須通過Context提供的getSharedPreferences(String, int)來獲得實例。該方法的第一個參數是指定XML文件名(不包含“.xml”后綴)的字符串,方法會去讀取出對應的文件,創建一個SharedPreferences對象。第二個參數指定文件的訪問權限,共有4中可選模式,從API 17開始基於安全的考慮,MODE_WORLD_READABLEMODE_WORLD_WRITEABLE已經被廢棄使用,只有MODE_PRIVATEMODE_MULTI_PROCESS可使用,一般情況下指定MODE_PRIVATE即可。
  2. 這里的Context我一般是建議選擇整個Application的context,而不是某一個Activity的context,因為整個application的context生命周期在大多數情況下要長於特定的activity的context。至於如何獲取,很簡單一個函數getApplicationContext()
  3. 我這里的context其實是我自定義的類中的一個static成員變量,在程序初次加載的時候,就把application的context賦予它,我們也可以在函數的形參中賦值進去。
  4. SharedPreferences所能存儲的類型被限定在了Stringintlongfloatboolean這些基礎數據類中,唯一的集合類型也只是Set<String>,而它看起來更像是用來作為不能有重復數據的數組。

生命周期內的全局變量

在上一篇Blog中也有用到這里的內容,一般來說,生命周期內的全局變量可以有很多,不同頁面之間傳遞或者有交叉使用的變量都可以放進來,所以我們通常也另外寫一個單獨的類,只不過和第一種不一樣,這個類需要繼承自Application

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import android.app.Application;

/**
* File Description: 記錄程序中的公共變量
* 這里面的公共變量包括程序時候在前台運行、頁面間傳遞的變量等,程序退出后即清空;
* 用戶名、密碼等需要程序在退出后仍然可以保留的變量記錄在CommonUtil中
* Created by KAKA on 16/2/6 21:57
* 本類中的公共變量有:
* is_active_ 程序是否處於前台狀態
*/
public class CommonVariables extends Application {

private boolean is_active_;

/**
* Description: 初始化各成員變量(公共變量)
* Created by KAKA on 16/2/7 09:34
*/
@Override
public void onCreate() {
super.onCreate();
setIsActive(true);
}

/**
* 記錄程序是否處於活躍狀態
*/
public boolean getIsActive() {
return is_active_;
}

public void setIsActive(boolean is_active) {
is_active_ = is_active;
}
}

只要用到的,我們都可以繼續在這個類里面繼續補充。
當然,我們的AndroidManifest文件中也要做相應的修改。

1
2
3
4
5
6
7
8
<application
android:name=".Utils.CommonVariables"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
...

添加android:name=".Utils.CommonVariables"屬性


免責聲明!

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



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