android app前后台的监听

来源:互联网 发布:怎么在淘宝上买微信号 编辑:程序博客网 时间:2024/04/27 22:17

当app按home或者返回键到主界面的时候,android没有提供一个明确的广播或者方法来判断,所以要实现这个只有从其它方面实现。

其实当我们按home键或者按返回键的时候,都会执行activity的onstop();方法,因此,可以写一个baseActivity在其中重新onstop()方法,然后每一个activity通过继承这个base来做判断,先来看看这种的实现方式。


public class baseActivity extends Activity{

private int mInBackgroud = 0;//标记
private boolean isInbackgroud = false;//判断程序是否在前台运行

@Override
protected void onStart() {
mInBackgroud++;
if(isInbackgroud&&mInBackgroud==1){
isInbackgroud = false;
//重新进入前台
}
super.onStart();
}

@Override
protected void onStop() {
mInBackgroud--;
if(mInBackgroud<1){
//代表此app没有运行在前台
isInbackgroud = true;
}
super.onStop();
}


上段代码就简单了写了app前后台变化的监听,在其中可以做我们想实现的方法。

熟悉Activity生命周期应该了解,运行一个app会执行某个activity的onstart()方法,这个时候mInBackgroud就会为1,

也就代表第一次在前台运行,当点击home后会执行stop(),此时mInBackgroud会为0,代表进入后台。当下次重新进入,

重走onstart()再次进入前台,当两个activity实现跳转或者回退的时候,这样的逻辑也是可以的,

因为跳转一个新页面的时候会优先执行新activity的onstart()这个时候mInBackgroud为2,是不会进入到重新进入前台的判断的。

之后会执行第一个activity的onstop(),mInBackgroud--为1,也表示正常,没有运行在后台。这个activity的跳转周期各位可以自己试一试。

   或许有人会觉得写个base太麻烦,还得每一个继承。或者有的人当初就没有写,其实在api14之后Application里面已经有了一个回调所有activity的方法,

可以监听每一个activity的声明周期


registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

@Override
public void onActivityStopped(Activity activity) {
RunInBackGround--;
Log.i("RunInBackGround", RunInBackGround+"");
if(RunInBackGround<1){
isRunInBackGround = true;

}
}


@Override
public void onActivityStarted(Activity activity) {
RunInBackGround++;
Log.i("RunInBackGround", RunInBackGround+"");
if(isRunInBackGround&&RunInBackGround==1){
isRunInBackGround = false;
//执行在后台的操作


}

}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
// TODO Auto-generated method stub

}

@Override
public void onActivityResumed(Activity activity) {
// TODO Auto-generated method stub

}


@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// TODO Auto-generated method stub

}


@Override
public void onActivityPaused(Activity activity) {
// TODO Auto-generated method stub

}


@Override
public void onActivityDestroyed(Activity activity) {
// TODO Auto-generated method stub

}



});



这样就不用重写base了,只需要重写Application调用上面的方法就可以了!

1 0
原创粉丝点击