1. 程式人生 > >Android:自定義Application儲存全域性變數

Android:自定義Application儲存全域性變數

構建app時,總是需要用到一些全域性變數,我們通過自定義的Application訪問。

我們的app就是一個application,啟動application時,系統會建立一個程序ID,所有的Activity就會在此程序上執行。可以在Application建立時初始化全域性變數,同一個應用的所有Activity都可以訪問這些全域性變數以及應用程式的上下文(getApplicationContext)。

下面是一個簡單的例子:

MyApp.java

繼承Application,使用單例模式,方便訪問。

import android.app.Application;

public class MyApp extends Application {

    private static MyApp instance = null;

    public static MyApp getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        instance = this;
    }

    private String appInfo = "I am a custom application.";

    public String getAppInfo() {
        return appInfo;
    }

    public void setAppInfo(String appInfo) {
        this.appInfo = appInfo;
    }
}

AndroidManifest.xml

只需要定義application的android:name屬性。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.xxx" >

    <application
        android:allowBackup="true"
        android:name=".MyApp"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tvAppVariable = (TextView) findViewById(R.id.tv_app_variable);

        // 自定義Application,儲存全域性變數
//        MyApp app = (MyApp) getApplicationContext();
//        String appInfo = app.getAppInfo();
        String appInfo = MyApp.getInstance().getAppInfo();
        tvAppVariable.setText(appInfo);
    }
}

可以在自定義Application中實現應用的初始化操作,定義公共變數、公共方法等。