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