Android開發–全局類的實現(用於保存使用的全局變量)

Android開發–全局類的實現

對於一個Android應用來說,全局變量的使用是難免的,比如要保存一個用戶登錄之後的狀態,而且這種變量對於應用來說是應該可以長時間保存的,Android對於這種變量的保存有自己自定義的全局類。


介紹
為瞭滿足上述條件中的使用,以及平時的許多函數必要的初始化,我們可以自定義一個類繼承於Application的類
示例代碼如下:

package com.example.outlier.prictace_1;

import android.annotation.TargetApi;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;

import io.rong.imkit.RongIM;

import static io.rong.imkit.utils.SystemUtils.getCurProcessName;

/**
 * Created by outlier on 2017/7/20.
 */

public class BaseApplication  extends Application {
    private static String PREF_NAME = "yixing_app.pref";


    static Context _context;
    private static boolean sIsAtLeastGB;

    static {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
            sIsAtLeastGB = true;
        }

    }

    @Override
    public void onCreate() {
        super.onCreate();
        _context = getApplicationContext();
        /**
         * OnCreate 會被多個進程重入,這段保護代碼,確保隻有您需要使用 RongIM 的進程和 Push 進程執行瞭 init。
         * io.rong.push 為融雲 push 進程名稱,不可修改。
         */
        if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext()))
                || "io.rong.push".equals(getCurProcessName(getApplicationContext()))) {
            //IMKit SDK調用第一步 初始化
            RongIM.init(this);
        }


    }

    public static synchronized BaseApplication context() {
        return (BaseApplication) _context;
    }

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public static void apply(SharedPreferences.Editor editor) {
        if (sIsAtLeastGB) {
            editor.apply();
        } else {
            editor.commit();
        }
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public static SharedPreferences getPreferences() {
        SharedPreferences pre = context().getSharedPreferences(PREF_NAME,
                Context.MODE_MULTI_PROCESS);
        return pre;
    }



    public static void set(String key, int value) {
        SharedPreferences.Editor editor = getPreferences().edit();
        editor.putInt(key, value);
        apply(editor);
    }

    public static void set(String key, boolean value) {
        SharedPreferences.Editor editor = getPreferences().edit();
        editor.putBoolean(key, value);
        apply(editor);
    }

    public static void set(String key, String value) {
        SharedPreferences.Editor editor = getPreferences().edit();
        editor.putString(key, value);
        apply(editor);
    }



    public static boolean get(String key, boolean defValue) {
        return getPreferences().getBoolean(key, defValue);
    }

    public static String get(String key, String defValue) {
        return getPreferences().getString(key, defValue);
    }

    public static int get(String key, int defValue) {
        return getPreferences().getInt(key, defValue);
    }

}

這裡面可以自己來定義需要在每個Application需要初始化的函數比如:

//IMKit SDK調用第一步 初始化
RongIM.init(this);

然後對於系統長期保存的變量可以看到我們自己定一個get和set的靜態方法,通過靜態方法的訪問可以實現。

這裡是以最常見的鍵值對的形式存儲

舉個例子:

        //登錄的時候設定用戶
        BaseApplication.set("userid","123");
        //訪問
        String userid = BaseApplication.get("userid","");

在任何一個Activity中設定之後在項目任何位置都可以進行直接的訪問


- 完成編寫之後??

AndroidMainfest.xml中設定android:name=".BaseApplication":

You May Also Like