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方法
Dana.Lee
To:Dana_Lee1016@126.com