Android中Application類用法

來源:互聯網
上載者:User

標籤:des   android   style   blog   color   io   os   java   ar   

Application類

Application和Activity,Service一樣是Android架構的一個系統組件,當Android程式啟動時系統會建立一個Application對象,用來儲存系統的一些資訊。

Android系統自動會為每個程式運行時建立一個Application類的對象且只建立一個,所以Application可以說是單例(singleton)模式的一個類。

通常我們是不需要指定一個Application的,系統會自動幫我們建立,如果需要建立自己的Application,那也很簡單!建立一個類繼承Application並在AndroidManifest.xml檔案中的application標籤中進行註冊(只需要給application標籤增加name屬性,並添加自己的 Application的名字即可)。

啟動Application時,系統會建立一個PID,即進程ID,所有的Activity都會在此進程上運行。那麼我們在Application建立的時候初始化全域變數,同一個應用的所有Activity都可以取到這些全域變數的值,換句話說,我們在某一個Activity中改變了這些全域變數的值,那麼在同一個應用的其他Activity中值就會改變。

Application對象的生命週期是整個程式中最長的,它的生命週期就等於這個程式的生命週期。因為它是全域的單例的,所以在不同的Activity,Service中獲得的對象都是同一個對象。所以可以通過Application來進行一些,如:資料傳遞、資料共用和資料緩衝等操作。

應用情境:

在Android中,可以通過繼承Application類來實現應用程式級的全域變數,這種全域變數方法相對靜態類更有保障,直到應用的所有Activity全部被destory掉之後才會被釋放掉。

見如下代碼:

package com.tugepclp_driver.config;import java.io.File;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.app.Activity;import android.app.Application;import android.app.NotificationManager;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Environment;import android.os.StrictMode;import com.baidu.mapapi.SDKInitializer;import com.tugepclp_driver.utils.NetworkUtils;public class AppApplication extends Application {    public static String mAppName; // 應用程式名稱    public static int mNetWorkState = NetworkUtils.NETWORN_NONE; // 網路    public static String mDownloadPath; // 下載路徑    public static int mVersionCode; // 版本    public static int mLatestVersionCode; // 新版本號碼    public static String mVersionName; // 版本名稱    public static boolean mShowUpdate = true; // 是否顯示更新    public static String mSdcardDataDir; // SD卡路    public static String mApkDownloadUrl = null; // APK下載路徑    private List<Activity> activities; // 用來儲存頁面    private static AppApplication mInstance;    private NotificationManager mNotificationManager;    private int biaoMsgNum = 0; // 任務接受,鏢的數量    private int emailMsgNum = 0; // 訊息通知,訊息數量    @Override    public void onCreate() {        mInstance = this;        activities = new ArrayList<Activity>();        initDB();        initMap();        initEnv();        initLocalVersion();        SysBaseData.getInstance().PHOTO_STRING = "";        mNotificationManager = (NotificationManager) getSystemService(android.content.Context.NOTIFICATION_SERVICE);    }    /**     * 資料庫     */    public void initDB() {        SDKInitializer.initialize(this);    }    public NotificationManager getNotificationManager() {        if (mNotificationManager == null)            mNotificationManager = (NotificationManager) getSystemService(android.content.Context.NOTIFICATION_SERVICE);        return mNotificationManager;    }    /**     * 地圖     */    public void initMap() {    }    /**     * 模式(此方法是針對4.2後,多線程調用問題的處理)     */    @SuppressLint("NewApi")    public void checkMode() {        int fv = android.os.Build.VERSION.SDK_INT;        if (fv > 10) {            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()                    .detectDiskReads().detectDiskWrites().detectNetwork()                    .penaltyLog().build());            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()                    .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()                    .penaltyLog().penaltyDeath().build());        }    }    public void initEnv() {        mAppName = "tugepclp_driver";        mDownloadPath = "/tugepclp_driver/download";        if (Environment.getExternalStorageState().equals(                android.os.Environment.MEDIA_MOUNTED)) {            File file = new File(Environment.getExternalStorageDirectory()                    .getPath() + "/tugepclp_driver/config/");            if (!file.exists()) {                if (file.mkdirs()) {                    mSdcardDataDir = file.getAbsolutePath();                }            } else {                mSdcardDataDir = file.getAbsolutePath();            }        }        mNetWorkState = NetworkUtils.getNetworkState(this);        // checkDomain(mDomain, false);    }    public void exitApp(Context context) {        for (Activity a : activities) {            if (a != null) {                a.finish();            }        }        // android.os.Process.killProcess(android.os.Process.myPid());        System.exit(0);    }    public static AppApplication getInstance() {        return mInstance;    }    public void addActivity(Activity activity) {        activities.add(activity);    }    public void exitClass() {        for (Activity a : activities) {            if (a != null) {                a.finish();            }        }    }    public int getBiaoMsgNum() {        return biaoMsgNum;    }    public void setBiaoMsgNum(int biaoMsgNum) {        this.biaoMsgNum = biaoMsgNum;    }    public int getEmailMsgNum() {        return emailMsgNum;    }    public void setEmailMsgNum(int emailMsgNum) {        this.emailMsgNum = emailMsgNum;    }    public void initLocalVersion() {        PackageInfo pinfo;        try {            pinfo = this.getPackageManager().getPackageInfo(                    this.getPackageName(), PackageManager.GET_CONFIGURATIONS);            mVersionCode = pinfo.versionCode;            mVersionName = pinfo.versionName;        } catch (NameNotFoundException e) {            e.printStackTrace();        }    }}

 

MainFest配置:

<application            android:name="com.tugepclp_driver.config.AppApplication"            android:allowBackup="true"            android:icon="@drawable/ic_launcher"            android:label="@string/app_name"            android:theme="@android:style/Theme.NoTitleBar">

Android中Application類用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.