zoukankan      html  css  js  c++  java
  • android开发之重写Application类

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


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


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

        <application
            android:name="com.example.apptest.MyApplication"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >

    重写的Application类:

    /**
     * 注意,在重写方法时必须调用超类的事件处理程序
     * @author 王松
     * @date 2015年7月30日
     */
    public class MyApplication extends Application {
    
        private String globalVar;
        private MyApplication instance;
        private List<Activity> 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<Activity>();
        }
    
        /**
         * 作为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。

    本程序完整代码下载http://pan.baidu.com/s/1ntMiYkL

    版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

  • 相关阅读:
    [leetcode] First Missing Positive
    [leetcode] Can Place Flowers
    [leetcode] Maximum Product of Three Numbers
    [leetcode] Generate Parentheses
    蓝桥杯 PREV-7 连号区间数
    蓝桥杯 PREV-3 带分数(dfs)
    蓝桥杯 PREV-2 打印十字图
    团体程序设计天梯赛 L3-016 二叉搜索树的结构 (30分)
    团体程序设计天梯赛 L3-020 至多删三个字符 (30分)(DP)
    团体程序设计天梯赛 L3-011 直捣黄龙 (30分)
  • 原文地址:https://www.cnblogs.com/lenve/p/4770531.html
Copyright © 2011-2022 走看看