標籤: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類用法