在API14中,android提供了一个新的状态监听的接口 ComponentCallbacks2。在当中的onTrimMemory方法中,提供了一个状态参数 TRIM_MEMORY_UI_HIDDEN。应该算是一个“正式”的进入后台标志了,之所以打引号,是因为这个状态本意上并不是为了监听进入后台而设计的,它只是为了让开发人员能够在程序进入后台的时候去释放一些内存。但是,这个确实能够准确的监控。
那有没有别的办法可以不依靠API14也能做呢?答案是肯定的。
首先,程序压入后台,Activity肯定是要走pause、stop的,返回的时候会走resume和start,但是正常Activity的切换也是要走这几个方法的,怎么区分呢?
根据Activity的生命周期可以知道,Activity A启动Activity B是先走B的onStart,再走A的stop,这样我们可以根据这个特点,建一个baseActivity(正常应该每个人应用都会有吧),在里面建立一个计数器v,在onStart和onstop里分别对v+1和-1;这样可以保证v在切换完成后的增量是0,最后的值应该是1(应用启动时的mainActivity)。这样再程序压入后台的时候会在stop里对计数器-1,这样再返回的时候start里得到的值就是0,这样就可以判断是从后台返回了。大致代码如下:
private static int v;
protected void onStart() {
super.onStart();
if (v== 0) {
// 从后台返回
}
v++;
}
protected void onStop() {
super.onStop();
if (v> 0)
v--;
if (sessionDepth == 0) {
// 进入后台
}
}