android的Application

  • package com.zhanwei.lee.application;
    
    import android.app.Application;
    import android.content.Context;
    import android.content.res.Configuration;
    import android.util.Log;
    
    import com.sjl.foreground.Foreground;
    
    /**
     * Created by lizhanwei on 17/6/18.
     */
    
    public class LeeApplication extends Application {
        
        private static Context mContext = null;
        
        private static final String TAG = "LeeApplication";
        Foreground.Listener listener = new Foreground.Listener() {
            @Override
            public void onBecameForeground() {
                Log.d(TAG,"onBecameForground");
            }
    
            @Override
            public void onBecameBackground() {
                Log.d(TAG,"onBecameBackground");
            }
        };
        @Override
        public void onCreate() {
            super.onCreate();
            Foreground.init(this).addListener(listener);
        }
    
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(base);
            this.mContext = base;
        }
    
        @Override
        public void onTerminate() {
            super.onTerminate();
        }
    
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
        }
    
        @Override
        public void onLowMemory() {
            super.onLowMemory();
        }
    
        @Override
        public void onTrimMemory(int level) {
            super.onTrimMemory(level);
        }
    
        public static Context getContext() {
            return mContext;
        }
    }
    

      

  • 启动Application时,系统会创建一个PID,即进程PID,所有的Activity都会在此进程上运行。在Application创建时初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,Application对象的生命周期是整个程序中最长的,它的生命周期就等于整个应用的生命周期,因为它是全局单例的,所以在不同的Activity或者Service得到的对象都是同一个对象。因此在android中避免使用静态变量来存储长久保存的值,可以用Application,但并不建议使用太多的全局变量。
    • attachBaseContext(Context base):得到应用上下文的Context,在应用创建时首先调用
    • onCreate():应用创建时调用,晚于attachBaseContext()方法
    • onTerminate():应用程序结束时调用
    • onConfigurationChanged(Configuration newConfig):系统配置发生变化时调用
    • onLowMemory():系统内存低时调用
    • onTrimMemory:系统要求应用释放内存时调用,level为级别
    • 从上面的抽象方法可以看出,这些方法都在这个应用生命周期之中,attachBaseContext和onCreate在应用创建时必须调用,而且他需要满足一定的触发时机
  • 在开发过程中,尽量使用Application中的Context实例,因为使用Activity中的Context可能会导致内存泄漏。也可以使用Activity的getApplicationContext方法

猜你喜欢

转载自www.cnblogs.com/endian11/p/9094701.html