码迷,mamicode.com
首页 > 移动开发 > 详细

Android中Application类用法

时间:2014-09-12 10:12:03      阅读:316      评论:0      收藏:0      [点我收藏+]

标签: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类用法

标签:des   android   style   blog   color   io   os   java   ar   

原文地址:http://www.cnblogs.com/ccddy/p/3967751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!