首页 > 代码库 > Android中Application类用法
Android中Application类用法
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类用法