android开发之重写Application类

在android应用开发中,重写Application也算是比较常见的,以前开发的一些程序太过于简单,都不要重写这个类,但是在真正的商业开发中,重写Application类几乎是必做的。
为什么要重写Application?


1.处理全局变量,在整个应用程序范围内共享数据
2.管理Activity,当应用程序退出时,销毁所有的Activity
3.初始化应用程序的配置信息
4.当系统内存不足时应用能够做出合理的响应
…..

继承了Application之后,一定要在清单文件中声明,即指明Application节点的name属性即可:

  <application></application>
重写的Application类:
/**
 * 注意,在重写方法时必须调用超类的事件处理程序
 * @author 王松
 * @date 2015年7月30日
 */
public class MyApplication extends Application {
 
    private String globalVar;
    private MyApplication instance;
    private List activities;
 
    /**
     * 单例模式
     * @return
     */
    public MyApplication getInstance(){
        if(instance == null)
            return new MyApplication();
        return instance;
    }
 
    /**
     * 添加activity
     * @param a
     */
    public void addActivity(Activity a){
        activities.add(a);
    }
 
    /**
     * 遍历所有Activity并finish
     */
    public void finishActivity() {
        for (Activity activity : activities) {
            if (activity != null && !activity.isFinishing()) {
                activity.finish();
            }
        }
    }
 
    public String getGlobalVar() {
        return globalVar;
    }
 
    public void setGlobalVar(String globalVar) {
        this.globalVar = globalVar;
    }
 
    /**
     * 在创建应用程序时调用,可以重写这个方法来实例化应用程序单态,以及创建和实例化任何应用
     * 程序状态变量或共享资源
     */
    @Override
    public void onCreate() {
        super.onCreate();
        activities = new LinkedList();
    }
 
    /**
     * 作为onLowMemory的一个特定于应用程序的替代选择,在android4.0时引入,
     * 在程序运行时决定当前应用程序应该尝试减少其内存开销时(通常在它进入后台时)调用
     * 它包含一个level参数,用于提供请求的上下文
     */
    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
    }
 
    /**
     * 与Activity不同,在配置改变时,应用程序对象不会被终止和重启。
     * 如果应用程序使用的值依赖于特定的配置,则重写这个方法来重新加载这些值,或者在应用程序级别处理这些值的改变
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
 
    /**
     * 当系统处于资源匮乏时,具有良好行为的应用程序可以释放额外的内存。
     * 这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用。
     * 我们可以重写这个程序来清空缓存或者释放不必要的资源
     */
    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }
 
}

关键地方都已用注释说明。

那么怎么在Activity中使用这个类呢?

MyApplication mp = (MyApplication) getApplication();
        mp.setGlobalVar(张三);
就是这么简单,不过大多情况下我们都会用Map来存储全局变量,这里为了简单,就直接使用了String。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值