生命周期回调
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG,"程序创建的时候执行");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.e(TAG,"程序低内存的时候执行");
}
@Override
public void onTerminate() {
Log.e(TAG,"只有在模拟器上,程序退出的时候执行,真机上不会");
super.onTerminate();
}
@Override
public void onTrimMemory(int level) {
if (level == TRIM_MEMORY_UI_HIDDEN) {
Log.e(TAG,"回到桌面");
Toast.makeText(this, "应用回到", Toast.LENGTH_SHORT).show();
} else if (level == TRIM_MEMORY_BACKGROUND) {
Log.e(TAG,"进入后台程序");
}
super.onTrimMemory(level);
}
onTrimMemory(int level) 的level字的意思:
这三个是当前程序正在运行:
TRIM_MEMORY_RUNNING_MODERATE(5):表示应用程序正常运行,但是目前手机的内存已经有点低了,您正在运行的进程可能需要在其他地方释放一些不必要的资源。系统可能会开始根据LRU缓存规则来去杀死进程了
TRIM_MEMORY_RUNNING_LOW(10):表示应用程序正常运行,但是目前手机的内存已经有点低了,您正在运行的进程应该腾出不必要的资源,允许在其他地方使用的内存。
TRIM_MEMORY_RUNNING_CRITICAL(15):表示应用程序正常运行,但在设备运行非常低内存,并即将不能够保持运行任何后台进程。您正在运行的进程应该腾出尽可能多的非关键资源,因为它可以允许在其他地方使用的内存。这种情况可以开始显着影响用户,在这之后就会调用onLowMemory()报告已经没有保持的后台进程之后。
这三个是当前程序在后台:
TRIM_MEMORY_UI_HIDDEN(20):用户重新回到桌面调用
TRIM_MEMORY_BACKGROUND(40):表示手机目前内存已经很低了,系统准备开始根据LRU缓存来清理进程。这个时候我们的程序在LRU缓存列表的最近位置,是不太可能被清理掉的,但这时去释放掉一些比较容易恢复的资源能够让手机的内存变得比较充足,从而让我们的程序更长时间地保留在缓存当中,这样当用户返回我们的程序时会感觉非常顺畅,而不是经历了一次重新启动的过程。
TRIM_MEMORY_MODERATE(60):表示手机目前内存已经很低了,并且我们的程序处于LRU缓存列表的中间位置,如果手机内存还得不到进一步释放的话,那么我们的程序就有被系统杀掉的风险了。
TRIM_MEMORY_COMPLETE(80):表示手机目前内存已经很低了,并且我们的程序处于LRU缓存列表的最边缘位置,系统会最优先考虑杀掉我们的应用程序,在这个时候应当尽可能地把一切可以释放的东西都进行释放。
判断程序的前后台:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
// 当有Activity调用onResumed()方法是调用。
}
@Override
public void onActivityPaused(Activity activity) {
// 当有activity调用onPaused()方法时调用。
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
当前台的时候:onResumed方法多调用一遍。
可以自己统计,也可以参考下面的文章:
手持ActivityLifecycleCallbacks,监听前后台状态如此舒服