application方法:
registerComponentCallbacks() & unregisterComponentCallbacks()
onTrimMemory()
onLowMemory()
onConfigurationChanged()
onCreate()
registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks()
onTerminate();
onTrimMemory():通知应用当前内存使用情况
场景:根据内存使用情况进行自身的内存资源的不同程度释放,避免被系统杀掉;
onLowMemory():系统整体内存较低的时候;
场景:android 4.0前检测内存使用情况,从而避免被系统直接杀掉;
特别注意:
OnTrimMemory()
&
OnLowMemory()
关系:
OnTrimMemory()是
OnLowMemory()
Android 4.0后的替代
API;
OnLowMemory() =
OnTrimMemory()中的
TRIM_MEMORY_COMPLETE级别;
若想兼容
Android 4.0前,请使用
OnLowMemory();否则直接使用
OnTrimMemory()即可;
onConfigurationChanged():监听程序配置信息的改变时调用 如屏幕旋转;
registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks():注册和销毁对程序内所有Activity生命周期监听(activity生命周期发生变化时就会调用);
onTerminate():程序结束时调用;
应用前后台切换逻辑
public class myapplication extends Application{
private boolean isBackGround;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycle();
}
/**
* 低内存时,清理掉glide所有的内存缓存。
*/
@Override
public void onLowMemory() {
super.onLowMemory();
Glide.get(this).clearMemory();
}
/**
* 为开发者提供了一个合适的时机,用来释放掉一些不用的资源,从而让我们的应用在后台存活更长时间。
* 其中level参数就代表我们的应用当前在内存中的状态,TRIM_MEMORY_UI_HIDDEN代表应用从前台切到了后台。
* 这个时候我们便可以标记应用切换到了后台。
* @param level
*
*/
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
if (level == TRIM_MEMORY_UI_HIDDEN) { //TRIM_MEMORY_UI_HIDDEN = 20;
isBackGround = true;
//app进入后台
try {
Glide.get(this).clearMemory();
} catch (Exception e) {
e.printStackTrace();
}
}
Glide.get(this).trimMemory(level);
}
/**
* 应用前后台切换逻辑
* 这个方案要求API大于等于14
*/
private void registerActivityLifecycle() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
//就是在 onPause() 创建一个延时检测任务,如果到时间内没有调用 onResume(),就说明应用暂停了
//监听 Android 应用级别的恢复和暂停——打电话切换等
private final Handler handler = new Handler(Looper.getMainLooper());
private boolean active = false;
private volatile long checkDelayTime = 100; // 延时检查时间,足够小但是保证 onResume() 可以进入到下一次主循环
private boolean checking = false;
private final Runnable checkRunnable = new Runnable() {
@Override
public void run() {
synchronized (checkRunnable) {
checking = false;
if (active) {
active = false;
// TODO 处理应用被暂停的逻辑
//应用被暂停,前台----后台
}
}
}
};
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityResumed(Activity activity) {
synchronized (checkRunnable) {
if (checking) {
handler.removeCallbacks(checkRunnable);
checking = false;
}
if (!active) {
active = true;
// TODO 处理应用被恢复的逻辑
//后台----前台
}
}
}
@Override
public void onActivityPaused(Activity activity) {
synchronized (checkRunnable) {
if (active) {
handler.removeCallbacks(checkRunnable);
handler.postDelayed(checkRunnable, checkDelayTime);
checking = true;
}
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
}